本节重点
获取表单数据中的底层域对象写法
获取表单数据中的模型封装、表达式封装
1、响应页面配置
全局加局部,局部优先级大
1.1 全局结果页面
作用:多个action,返回的是用一个结果页面
配置:在package中!
只在当前package中生效
1.2 局部结果页面(普通写法)
<package name="demo" extends="struts-default" namespace="/">
<global-results>
<result name="success">/quanju.jsp</result>
</global-results>
<action name="Login" class="com.lin.action.LoginAction">
<result name="success">/login.jsp</result>
</action>
<action name="Regist" class="com.lin.action.RegistAction">
<!--<result name="success">/regist.jsp</result>-->
</action>
</package>
1.3 result中的type属性
到页面中
- 重定向 redirect
- 转发 dispatcher
到其他action
- chain:转发到action 一般不用
- redirectAction: 重定向到action
2、在action获取表单提交的数据
先介绍比较底层的实现方法:
方法一、使用ActionContext类获取context对象
方法二:使用ServletActionContext类获取域对象
操作域对象
方法三: 使用接口的注入方式获取
struts2封装了的方法:
方法一:属性封装(用得少)
在action在定义数据成员(跟表单一一对应,且等于name的值,当表单发送数据过来,自动封装数据到数据成员中)
方法二:模型驱动封装(常用)
当表单发送数据过来时,自动把数据封装到特定的对象里面
步骤为:
第一步:action实现ModelDriven
第二步:new一个实体类的对象
Customer customer = new Customer();
第三步:在getModel中返回该对象
@Override
public Customer getModel() {
return customer;
}
第四步:就可以在方法里面由对象获取数据了
方法三:表达式封装
上面的模型驱动封装,只能把页面的数据封装到一个实例对象中,如果表单传的数据要求封装到多个对象,那么就无法达到目的了。表达式封装可以实现。
第一步:在action里声明实体类
第二部:生成实体类对象的get、set方法
第三步:在表单输入项的name属性值里面写表达式形式
3、获取表单数据的拓展
3.1、封装到list
3.2 封装到map
4、实战,客户关系系统中的添加客户
第一步: 通过模型驱动完成表单获取
第二步:使用hibernate插入新数据
第三步:发送请求至查询页面,展示新插入的数据