在action中对数据进行操作
1:结果页面的配置
1.result标签配置action方法的返回值到不同的路径里面
2.创建两个action,都执行默认的方法execute方法,让两个action方法都返回success,返回success后配置到同一个页面·
弊端:结果页面都一样,返回值都一样,但是太浪费了,于是我们引入了全局页面
(1)全局结果页面
如果说多个action,方法里面返回值相同的,到页面也是相同的,这个时候用全局页面
(2)局部结果页面
1》即配置了全局页面,有配置了局部页面,以局部页面为准
(3)result标签 的type属性
1》result标签里面除了name属性之外,还有一个属性type
(1)type属性:如何到路径中去(转发还是重定向)
2》type属性值
(1)默认值,做转发操作,值是dispatcher
(2)做重定向操作,值是 redirect
这两个值是针对页面的配置,配置到其他的action里面
-chain:转发到action,一般不用,缓存问题
-redirectAction:重定向到action
2:在action获取表单提交数据
1:之前在web阶段,提交表单到servlet里面,在servlet里面使用request对象里面的方法获取
getParameter,getParamterMap
2:提交表单到action,但是action里面没有request对象,不能直接使用request对象
3:action获取表单数据,如下;
(1)使用ActionContext类获取
因为方法不是静态的,所以要创建ActionContext对象
这个方法对象不是new出来的
具体做个演示
(1)创建表单,提交表单到action里面
(2)在action使用ContextAction获取数据,获得request方法
(2)使用ServletActionContext获取
可以调用类里面的静态方法,
HttpServletRequest request=ServletActionContext.getRequest();
String username=request.getParameter("username");
String password=request.getParameter("password");
String address=request.getParameter("address");
(3)使用接口注入方式获取(一般不用)
1:让action实现一个借口,得到一个request对象
1:在action操作域对象:request,session,servletcontext:2:
2:使用ServletActionContext类操作
3:struts提供获取表单数据方式
使用最原始的方法封装实现类对象
(1)属性封装
直接把表单提交的数据封装到action的属性里面
实现步骤:
在action成员变量位置定义变量
-变量名称和表单输入项的name属性值一样,这样就直接通过里面的名字调用里面的set方法,设置值
生成变量set方法(把set和get方法写出来)
3.使用属性封装获取表单数据到属性里面,不能把数据直接封装到实体对象里面,于是我们用到了模型驱动方式
(2)模型驱动封装(重点)
直接把数据从表单封装到一个实体类中去(如users)
实现步骤:
(1)action实现接口 ModelDriven
(2)实现接口的方法getModel方法
-把我们创建的对象返回
3.使用模型驱动和属性封装需要注意的问题
(1)在一个action中,获取表单数据可以属性封装,使用模型驱动封装,不能同时使用属性封装和模型驱动封装获取同一个表单数据,两个都用只会执行模型驱动,
3.表达式封装(会用)
1实现过程
(1)使用表达式封装可以把表单数据封装到实体类对象里面
第一步:在action里面声明实体类
第二步:生成实体类变量的set和get方法
第三步 在表单输入项的name属性值里面写表达式形式
可以把表达式封装归类到属性封装里面
比较表达式封装和模型驱动
1:使用表达式封装和模型封装都可以把数据封装到实体类对象里面
2.不同点
(1)使用模型驱动只能把数据封装到一个实体类对象里面。在一个action里面不能使用模型驱
动把数据封装到不同的实体类对象里面
(2)使用表达式可以把数据封装到不同的实体类对象里面
4:struts获取数据封装于集合中(会用)
(1)封装到list集合
第一步 在action声明list
第二步 生成list变量的get和 set方法
第三步在表单输入项 里面写表达式(第三天会用到s:iterator)
(2)封装到map中
声明一个map集合
生成get和set方法
第三步在表单输入项 里面写表达式