概述
一、 结果页面配置
(1)局部结果页面
1)对每个action进行单独配置。
2)在<action>内部配置
(2)全局结果页面 :统一配置多个action
作用:使多个具有相同返回值的action返回到相同页面
优点:统一配置,减少代码量
使用方法:使用<global-results>对返回值设置页面,在<package>内部配置
生效范围:只在<global-results>标签所在package内生效。
示例:对下面两个action配置相同返回值,并跳转到相同页面
<!-- 全局结果页面配置: 将所有返回值相同的action,配置跳转到相同页面 -->
<global-results>
<result name="ok">/index.jsp</result>
</global-results>
<!-- action标签:配置action访问路径 -->
<action name="add" class="action.ActionTest" method="add">
</action>
<action name="delete" class="action.ActionTest" method="delete">
</action>
注:若全局配置中存在局部配置,则以局部配置为准!!
二、action中获取表单提交数据的三种方式
(1)使用ActionContext类获取
原因:为了使用类中getParameters()方法,该方法可获取表单数据。
方法:
1)Map<String,Object> getParameters();
--返回Map对象,其中包含所有HttpServletRequest参数信息
2)getContext();
ActionContext中静态方法,用来得到ActionContext对象。
使用步骤:
在action中:
1)使用静态方法getContext()获取ActionContext对象
2)调用方法获取表单数据
代码示例:
/*
* 使用ActionContext获取数据
*
步骤:
*
1)获取ActionContext对象,使用Action.getContext.getContext()方法
*
2)调用getParameters()方法获取表单数据
*
方法返回值为Map
*
3)使用key遍历Map
*/
public class Form1 extends ActionSupport {
public String execute() throws Exception {
//1)获取ActionContext对象
ActionContext context = ActionContext.getContext();
//2)调用方法得到表单数据
Map<String, Object> map = context.getParameters();
//使用key遍历Map--根据key得到value值
//3)得到key的集合,使用.keySet()方法。 返回值为Set<String>集合
Set<String> keys = map.keySet();
//4)遍历,输出
for (String key : keys) {
//因为输入项中可能存在复选框情况,所以使用数组形式接收value
Object[] obj = (Object[]) map.get(key);
System.out.println(Arrays.toString(obj));
}
return NONE;
}
}
(2)使用ServletActionContext类获取
优点:可用来操作action域对象
背景:页面查询显示操作中,需要将查询到的数据放入域对象中,然后遍历输出
代码示例:
/*
* 使用ServletActionContext类获取表单书数据
*
步骤:
*
1)获取request对象。
*
使用ServletActionContext类中getRequest()方法
*
2)调用request中getParameters得到参数值
*
*/
public class Form2 extends ActionSupport {
@Override
public String execute() throws Exception {
//1)获取request对象。
HttpServletRequest request = ServletActionContext.getRequest();
//2)调用request中getParameters得到参数值
String username = request.getParameter("username");
String password = request.getParameter("password");
String address = request.getParameter("address");
System.out.println(username +"--"+ password +"--"+ address);
return NONE;
}
}
ServletActionContext类中常用方法:
(3)使用接口注入方式获取(了解)
原理:让action实现接口,从而得到request对象
/** 使用ServletActionContext类操作域对象演示
*
* 操作三种域对象演示
*
1)Request
*
2)Session
*
3)ServletContext
*
* 步骤:
*
1)得到域对象
getXxx()
*
2)设置域对象属性名、属性值
setAttribute()
* @author 一万年行不行
*
*/
public class Form3 extends ActionSupport {
@Override
public String execute() throws Exception {
//操作域对象演示
//1)Request域
得到域对象、设置属性名,属性值
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("req", "reqValue");
//2)Session域
得到域对象、设置属性名,属性值
HttpSession Session = request.getSession();
Session.setAttribute("sess", "sessValue");
//3)ServletContext域
//得到域对象、设置属性名,属性值
ServletContext Context= ServletActionContext.getServletContext();
Context.setAttribute("contextname", "contextValue");
return NONE;
}
}
三、 struts2中提供的获取表单数据方式
三种方式:
1)模型驱动封装
2)属性封装
3)表达式封装
1)模型驱动封装(重点)
作用:直接把表单数据封装到实体类对象里面
前提条件:表单输入项中name属性值和实体类属性名相同
步骤:
1)对action实现接口
-- implements ModelDriven<User>
User为模型类
2)创建模型类对象
3)实现接口中方法
代码示例:
/**
* 使用模型驱动获取表单数据
*
* @author 一万年行不行
*
*/
//1)实现接口
-- implements ModelDriven<User>
public class Data2 extends ActionSupport implements ModelDriven<User> {
//2)创建模型类对象
private User user = new User();
//3)实现接口中方法 --getModel(), 返回创建对象
@Override
public User getModel() {
return user;
//返回创建对象
}
@Override
public String execute() throws Exception {
//测试输出
System.out.println(user);
return NONE;
}
}
注:
1)在一个action中,获取表单数据可以属性封装,也可使用模型驱动封装,
2)不能同时使用两种封装获取同一个表单数据,若同时使用,只执行模型驱动
2)属性封装(会用即可)
底层技术:内省。根据表单值匹配action中属性,匹配到后直接对属性赋值
效果:直接把表单提交属性封装到action的属性里面
缺点:不能把数据封装到实体类对象里面。
实现步骤:
1)在action成员变量位置定义变量
变量名称和表单输入项的name属性值一样
2)生成变量的set方法(把set和get方法都写出来)
代码演示:
/**
* 使用属性封装获取表单数据
*
* @author 一万年行不行
*
*/
public class Form4 extends ActionSupport {
//1)定义变量
//变量名称需要和表单输入项中name属性值相同
private String username;
private String password;
private String address;
//2)生成set方法
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String execute() throws Exception {
System.out.println(username +"--"+ password +"--"+ address);
return NONE;
}
}
3)表达式封装(会用)
效果:可以把表单数据封装到实体类对象里面
实现步骤:
1)在action类里面声明实体类
2)生成实体类变量的set和get方法
3)在jsp页面中表单输入项的name属性值里面写表达式形式
代码示例:
/**
* 表达式封装表单数据
*
* @author 一万年行不行
*
*/
public class Data3 extends ActionSupport{
//1)在action类里面声明实体类
private User user;
//2)生成实体类变量的set和get方法
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
}
<!-- 3)在jsp页面中表单输入项的name属性值里面写表达式形式
-->
username:<input type="text" name="user.username"/> <br/>
password:<input type="password" name="user.password"/> <br/>
address:<input type="text" name="user.address"/> <br/>
注:把表达式封装也可归类到属性封内
表达式封装和模型驱动封装比较
相同点:可以把数据封装到实体类对象里面
不同点:表达式封装可以封装到不同的实体类里面
四、struts2获取数据封装到集合中(会用)
(1)封装数据到list集合
步骤:
1)在action声明List
2)生成list变量的set和get方法
3)在表单输入项里面写表达式
代码示例:
/**
* 封装数据到list集合
* @author 一万年行不行
*
*/
public class ListAction extends ActionSupport {
// 1)声明List变量
private List<User> list;
// 2)生成get和set方法
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
@Override
public String execute() throws Exception {
System.out.println(list);
return NONE;
}
}
jsp页面:
<form action="${pageContext.request.contextPath }/list.action" method="post">
<!-- 3)在表单输入项里面写表达式 -->
<!-- list[0] : 表示list集合中第一个user对象 -->
username:<input type="text" name="list[0].username"/>
<br/>
password:<input type="text" name="list[0].password"/>
<br/>
address:<input type="text" name="list[0].address"/>
<input type="submit" value="提交"/>
</form>
(2)封装数据到map集合
步骤:
1)在action声明Map
2)生成list变量的set和get方法
3)在表单输入项里面写表达式
代码示例:
/**
* 封装数据到map集合
* @author 一万年行不行
*
*/
public class MapAction extends ActionSupport {
// 1)声明map集合
private Map<String,User> map;
// 2)生成get和set方法
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
}
@Override
public String execute() throws Exception {
System.out.println(map);
return NONE;
}
}
jsp页面:
<form action="${pageContext.request.contextPath }/map.action" method="post">
<!-- 3)在表单输入项里面写表达式 -->
<!-- 设置key值 map['key值']
设置value值
-->
username:<input type="text" name="map['one'].username"/>
<br/>
password:<input type="text" name="map['one'].password"/>
<br/>
address:<input type="text" name="map['one'].address"/>
<input type="submit" value="提交"/>
</form>
最后
以上就是过时纸飞机为你收集整理的Struts2_02---结果页面配置、获取表单数据、封装数据到集合的全部内容,希望文章能够帮你解决Struts2_02---结果页面配置、获取表单数据、封装数据到集合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复