struts2对表单数据的操作

本文详细介绍了在Struts2框架中处理表单数据的多种方法,包括使用ActionContext、ServletActionContext、实现ServletRequestAware类,以及通过属性封装、模型驱动、表达式封装等方式进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本操作:

1.ActionContext方式:写在Action中
首先ActionContext调用静态getContext()方法,获得Context对象,Context调用getParameter()方法,返回一个Map类型的值。通过遍历Map,获得表单数据。

	public String execute() throws Exception {
		ActionContext context = ActionContext.getContext();
		Map<String,Parameter> parameters = context.getParameters();
		Set<String> key = parameters.keySet();
		for(String keys:key) {
			System.out.println(parameters.get(keys));
		}
		return NONE;
	}

2.使用ServletActionContext类:(这种方法最简单,最常用)
ServletActionContext调用getRequest()方法,直接获得Request对象,然后就和servlet中的操作一样。

	public String execute() throws Exception {
		HttpServletRequest request = ServletActionContext.getRequest();
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		return NONE;
	}

3.实现ServletRequestAware类:
通过实现ServletRequestAware类,申明一个HttpServletRequest变量request,通过setServletRequest()方法注入。

	private HttpServletRequest request;
	@Override
	public void setServletRequest(HttpServletRequest request) {
		// TODO Auto-generated method stub
		this.request = request;
		
	}
	public String execute() throws Exception{
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		System.out.println("username:"+username+",password:"+password);
		return NONE;
	}

二、使用封装技术来操作表单数据:

1.属性封装:在action类中定义成员变量,名称和表单中属性名称一模一样。同时在action类中为成员变量设置set方法即可。
jsp文件:

<form action="${pageContext.request.contextPath}/form01" method="post">
Username:<input type="text" name="username"><br/>
Password:<input type="text" name="password"><br/>
<input type="submit" value="提交"> 

action类:

	private String username;
	private String password;
	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String execute() throws Exception {
		System.out.println("username:"+username+",password:"+password);
		return NONE;
	}
}

2.使用模型驱动封装操作操作表单:
Action类实现一个名为ModelDriven类,并且需要将表单属性封装成javaBean,比如User类,定义User类的变量

public class ActionForm02 extends ActionSupport implements ModelDriven<User>{
	
	private User user = new User();
	@Override
	public User getModel() {
		return user;
	}
	
	@Override
	public String execute() throws Exception {
		System.out.println(user);
		return NONE;
	}
}

User类:

package com.fxy.struts.form;

public class User {
	private String username;
	private String password;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + "]";
	}
	
	
}

使用封装属性和驱动模型封装的方法时需要注意不能对同一个表单同时使用这两种方法,如果同时使用将采用驱动模型封装的方法。

3.表达式封装:在Action类中声明一个实体类,并且为这个实体类生成set和get方法,在表单name中改写。jsp中user由于action类中设置了setUser和getUser从而获得user对象,然后user.username和user.password将username和password通过User类中的Set方法设置进去。
Action类:

	private User user;
	
	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;
	}

User类:

package com.fxy.struts.form;

public class User {
	private String username;
	private String password;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + "]";
	}
	
	
}

jsp:

<form action="${pageContext.request.contextPath}/form03" method="post">
Username:<input type="text" name="user.username"><br/>
Password:<input type="text" name="user.password"><br/>
<input type="submit" value="提交">

表达式封装可以获得不同对象的属性值,而模型驱动只能获取同一个对象的值。

4.将表单数据封装到List集合和Map集合:步骤和上面的表达式步骤相同。
list操作:
Action类:

	private List<User> list;
	
	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}/form04" method="post">
<!-- 这里的list[0]代表第一个list集合 -->
Username:<input type="text" name="list[0].username"><br/>
Password:<input type="text" name="list[0].password"><br/>

Username:<input type="text" name="list[1].username"><br/>
Password:<input type="text" name="list[1].password"><br/>
<input type="submit" value="提交">
</form>

在这里插入图片描述
Map操作:
action:

	private Map<String, User> map;

	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}/form05" method="post">
<!-- 这里的map['fxy']设置的是map的key值-->
Username:<input type="text" name="map['one'].username"><br/>
Password:<input type="text" name="map['one'].password"><br/>

Username:<input type="text" name="map['fxy'].username"><br/>
Password:<input type="text" name="map['fxy'].password"><br/>
<input type="submit" value="提交">
</form>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值