一、内容大纲
1 结果页面配置
(1)全局结果页面
(2)局部结果页面
- 配置全局也配置局部,最终局部为准
(3)result标签type属性
- 默认值 dispatcher做转发
- redirect做重定向
- chain:转发到action
- redirectAction:重定向到action
2在action获取表单提交数据
(1)使用ActionContext类获取
(2)使用ServletActionContext类获取
(3)使用接口注入方式获取
- 使用ServletActionContext类操作域对象
3 struts2提供获取表单数据方式
(1)属性封装
- 定义变量,变量和表单输入项name属性值一样,生成get和set方法
(2)模型驱动封装(重点)
- 实现接口,实现接口里面的方法,表单输入项name属性值和实体类属性名称一样
(3)表达式封装
(4)表达式封装和模型驱动封装比较
- 相同点:可以把数据封装到实体类对象里面
- 不同点:表达式封装可以封装到不同的实体类里面
4 struts2获取数据封装到集合中(会用)
(1)封装到list集合
(2)封装到map集合
5 案例-添加客户功能
二、结果页面配置
全局结果页面
1 result标签配置action方法的返回值到不同的路径里面
2 创建两个action,执行默认的方法execute方法,让两个action的方法都返回success,返回success之后,配置到同一个页面里面
(1)如果多个action,方法里面返回值相同的,到页面也是相同的,这个时候可以使用全局结果页面配置
(2)在package标签里面配置
局部结果页面
(1)配置全局页面,也配置了局部页面,最终以局部配置为准
Result标签的type属性
1 result标签里面除了name属性之外,还有一个属性 type属性
(1)type属性:如何到路径里面(转发还是重定向)
2 type属性值
(1)默认值,做转发操作,值是 dispatcher
(2)做重定向操作,值是 redirect
(2)上面两个值dispatcher、redirect,这两个值一般针对到页面中配置,
配置到其他的action里面
- chain:转发到action,一般不用,缓存问题
- redirectAction:重定向到action
三、Action获取表单提交数据
1 之前web阶段,提交表单到servlet里面,在servlet里面使用request对象里面的方法获取,getParameter,getParameterMap
2 提交表单到action,但是action没有request对象,不能直接使用request对象
3 action获取表单提交数据主要三种方式
(1)使用ActionContext类
(2)使用ServletActionContext类
(3)使用接口注入方式
使用ActionContext类获取
(1)因为方法不是静态的方法,需要创建ActionContext类的对象
(2)这个ActionContext类对象不是new出来的,
1 具体演示
(1)创建表单,提交表单到action里面
(2)在action使用ActionContext获取数据
使用ServletActionContext类获取
(1)调用类里面静态方法,得到request对象
使用接口注入(了解)
1 让action实现接口,为了得到request对象
在action操作域对象
1 request、session、servletContext域对象
2 使用ServletActionContext类操作
四、Struts2封装获取表单数据方式
原始方式获取表单封装到实体类对象
属性封装(会用)
1 直接把表单提交属性封装到action的属性里面
2 实现步骤
(1)在action成员变量位置定义变量
- 变量名称和表单输入项的name属性值一样
(2)生成变量的set方法(把set和get方法都写出来)
3 使用属性封装获取表单数据到属性里面,不能把数据直接封装到实体类对象里面
模型驱动封装(重点)
1 使用模型驱动方式,可以直接把表单数据封装到实体类对象里面
2 实现步骤
(1)action实现接口 ModelDriven
(2)实现接口里面的方法 getModel方法
- 把创建对象返回
(3)在action里面创建实体类对象
3 使用模型驱动和属性封装注意问题:
(1)在一个action中,获取表单数据可以属性封装,使用模型驱动封装,
不能同时使用属性封装和模型驱动封装获取同一个表单数据
如果同时使用,之后执行模型驱动
表达式封装(会用)
1 实现过程
(1)使用表达式封装可以把表单数据封装到实体类对象里面
第一步 在action里面声明实体类
第二步 生成实体类变量的set和get方法
第三步 在表单输入项的name属性值里面写表达式形式
2 把表达式封装归类到属性封装里面
比较表达式封装和模型驱动封装
1 使用表达式封装和模型驱动封装都可以把数据封装到实体类对象里面
2 不同点:
(1)使用模型驱动只能把数据封装到一个实体类对象里面
- 在一个action里面不能使用模型驱动把数据封装到不同的实体类对象里面
(2)使用表达式封装可以把数据封装到不同的实体类对象里面
五、封装到集合里面
封装数据到List集合
第一步 在action声明List
第二步 生成list变量的set和get方法
第三步 在表单输入项里面写表达式
封装数据到Map集合
第一步 声明map集合
第二步 生成get和set方法
第三步 在表单输入项的name属性值里面写表达式
案例-添加客户功能
1 模型驱动获取表单数据
2 在hibernate实现
3 添加之后到列表页面中,让列表的action执行一次
参考资料
《黑马程序员》