前几天谈恋爱去了 今天打卡第四天学习Struts2
Action 获取表单提交
结果页面配置
全局结果页面配置
- result 标签配置 action 方法的返回值到不同的路径里面;
- 创建两个 action,执行默认的方法 execute方法,让两个 action 的方法都返回 success,返回success之后,配置到同一个页面
(1)如果多个 action ,方法里面返回值相同的,到页面也是相同的,这个时候可以使用全局结果页面配置
局部结果页面配置
- 配置全局页面,也配置了局部页面,最终以局部配置为准
result标签的type属性
- result 标签里面除了 name 属性之外,还有一个 type属性
(1)type 属性:如何到路径里面(转发还是重定向) - type属性值
(1)默认值,做 转发操作,值为 dispatcher
(2)做重定向操作,值是 redirect
(3)上面两个值 dispatcher、 redirect,这两个值一般针对页面中配置,配置到其他的action里面
(4)chain:转发到action, 一般不用,缓存问题
(2)redireAction:重定向到action
Action 获取表单数据
- 之前 web 阶段,提交表单 到 servlet 里面,在 servlet 里面使用 request 对象里面的方法获取,getParameter,getParameterMap
- 提交表单到 action,但是 action没有 request对象,不能直接使用 request 对象
- action 获取表单提交数据主要三种方式
(1)使用 ActionContext类
(2)使用 ServletActionContext类
(3)使用接口注入方式(一般不用)
使用 ActionContext类
(1) 因为这个方法不是静态的方法,需要创建 ActionContext 类的最新
(2)这个 ActionContext 类对象不是 new 出来的
- 具体演示
(1)创建表单,提交表单到 action 里面
(2)在 action 使用 ActionContext 获取数据
form1.jsp
Form1DemoAction.java
struts.xml
使用ServletActionContext类
(1)调用类里面静态方法,得到 request 对象
Form2DemoAction.java
使用接口注入
- 让 action 实现接口, 为了得到 request
Form3DemoAction.java
在 action 操作域对象
- request 、session 、servletContext 域对象
- 使用 servletActionContext 类操作
Struts2 封装获取表单数据方式
原始方法获取表单封装到实体类对象
实体类User.java
Form4DemoAction.java
属性封装
- 直接把表达提交属性封装到 action 的属性里面
- 实现步骤
(1)在 action 成员变量位置定义变量
变量名称和表单输入项的name 属性值一样
(2)生成变量的 set 方法(把 set 和 get 方法都写出来)
- 使用属性封装获取表单数据到属性里面,不能把数据直接封装到实体类对象里面
模型驱动封装(重点)
- 使用模型驱动方式,可以直接把表单数据封装到实体类对象里面
- 实现步骤
(1)action 实现接口 ModelDriven
ModelDriven<填实体类名>
(2)实现接口里面的方法 getModel 方法
把创建对象返回
(3)在 action 里面创建实体类对象 - 使用模型驱动和属性封装注意问题:
(1)在一个 action 中,获取表达数据可以属性封装,也可以使用模型驱动封装,但是不能同时使用属性封装和模型驱动封装 得到同一个 表达 数据
如果同时使用,只会执行模型驱动封装
表达式封装(会用)
- 实现过程
(1)使用表达式封装可以把表单数据封装到实体类对象里面
第一步 在 action 里面声明实体类
第二步 生成实体类变量的 set 和 get 方法
第三步 在表单输入项的 name 属性值里面写表达式形式
- 表达式封装 归类到 属性封装
比较 表达式封装 和 模型驱动封装
- 使用表达式封装和模型驱动封装都可以把数据封装到实体类对象里面
- 不同点:
(1)使用模型驱动只能把数据封装到一个实体类对象里面
在一个 action 里面不能使用模型驱动把数据封装到不同的实体类对象里面
(2)使用表达式封装可以把数据封装到不同的实体类对象里面
以上的代码需要自己做一些小修改
struts.xml 跟 form1.jsp 修改可以参考 使用 ActionContext类 里面的具体演示