Struts之封装表单数据

1.原始方式

User.java

package zh.action.demo;

import java.util.Arrays;

public class User {

	private String username;
	private String password;
	private String sex;
	private String[] hobby;
	
	public User(){
		
	}

	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;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String[] getHobby() {
		return hobby;
	}

	public void setHobby(String[] hobby) {
		this.hobby = hobby;
	}

	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password
				+ ", sex=" + sex + ", hobby=" + Arrays.toString(hobby) + "]";
	}
	
}

form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath}/formAction.action" method="post" enctype="application/x-www-form-urlencoded">
		用户名:<input type="text" name="username"><br/>
		密码:<input type="text" name="password"><br/>
		性别:<input type="radio" name="sex" value="man">男
		<input type="radio" name="sex" value="woman">女<br>
		爱好:<input type="checkbox" name="hobby" value="study">学习
		<input type="checkbox" name="hobby" value="music">音乐
		<input type="checkbox" name="hobby" value="sleep">睡觉<br/>
		<input type="submit" value="提交">
		<input type="reset" value="重置">
	</form>
</body>
</html>

FormAction.java

package zh.action.demo;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 封装表单数据
 * 
 * @author ZH
 */
public class FormAction extends ActionSupport {

	public String params() {
		
		/**
		 * 原始封装方式
		 */
		HttpServletRequest request = ServletActionContext.getRequest();
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String sex = request.getParameter("sex");
		String[] hobby = request.getParameterValues("hobby");
		
		User user = new User();
		user.setUsername(username);
		user.setPassword(password);
		user.setSex(sex);
		user.setHobby(hobby);

		System.out.println(user);
//		User [username=姬如雪, password=6677, sex=null, hobby=[music, sleep]]
		
		return NONE;

	}

}

2.属性封装

FormAction.java

package zh.action.demo;

import java.util.Arrays;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 封装表单数据
 * @author ZH
 */
public class FormAction extends ActionSupport {

	// 属性封装:直接把表单数据封装到Action的属性
	// 要求1:Action的属性名称 必须和 表单中name属性值 相同
	// 要求2:Action的属性要具备setXXX(),这样才可以封装成功
	
	private String username;
	private String password;
	private String sex;
	private String[] hobby;
	
	public void setUsername(String username) {
		this.username = username;
	}

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

	public void setSex(String sex) {
		this.sex = sex;
	}

	public void setHobby(String[] hobby) {
		this.hobby = hobby;
	}

	// 以下,就可以直接输出Action属性的值,这些值对应表单数据
	public String params() {
		
		System.out.println(username);// 女帝
		System.out.println(password);// 7788
		System.out.println(sex);// woman
		System.out.println(Arrays.toString(hobby));// [study, music, sleep]
		
		return NONE;

	}

}

3.模型驱动

FormAction.java

package zh.action.demo;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
 * 封装表单数据
 * @author ZH
 */
public class FormAction extends ActionSupport implements ModelDriven<User>{

	// 模型驱动:把表单数据封装到实体类
	// 要求1:实体类的属性名称 必须和 表单中name属性值 相同
	// 要求2:实现ModelDriven<T>接口,T为实体类,重写唯一的抽象方法getModel()
	// 要求3:在Action中创建实体类的成员变量
	
	// 必须是  “创建” 实体类对象
	private User user = new User();
	
	// 重写抽象方法
	public User getModel() {
		return user;
	}

	// 以下,就可以直接输出user,user中个属性值对应各表单数据
	public String params() {
		
		System.out.println(user);
		// User [username=李星云, password=1122, sex=man, hobby=[study, sleep]]
		return NONE;

	}

}

4.表达式封装

FormAction.java

package zh.action.demo;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 封装表单数据
 * @author ZH
 */
public class FormAction extends ActionSupport {

	// 表达式封装:把表单数据封装到实体类对象
	// 要求1:在Action中声明实体类,并且生成setXXX()和getXXX()
	// 要求2:表单中,name属性值写法为:name="实体类对象.属性"
	
	// 声明实体类对象
	private User user;
	
	public void setUser(User user) {
		this.user = user;
	}
	
	public User getUser() {
		return user;
	}

	// 以下,就可以直接输出user,user中个属性值对应各表单数据
	public String params() {
		
		System.out.println(user);
		// User [username=龙葵, password=8899, sex=woman, hobby=[music, sleep]]
		return NONE;
		
	}

}

form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath}/formAction.action" method="post" enctype="application/x-www-form-urlencoded">
		用户名:<input type="text" name="user.username"><br/>
		密码:<input type="text" name="user.password"><br/>
		性别:<input type="radio" name="user.sex" value="man">男
		<input type="radio" name="user.sex" value="woman">女<br>
		爱好:<input type="checkbox" name="user.hobby" value="study">学习
		<input type="checkbox" name="user.hobby" value="music">音乐
		<input type="checkbox" name="user.hobby" value="sleep">睡觉<br/>
		<input type="submit" value="提交">
		<input type="reset" value="重置">
	</form>
</body>
</html>

【总结】

1.属性封装:只把表单数据封装到Action的属性中,而不封装到实体类对象中。

2.模型驱动:只能把表单数据封装到一个实体类对象中。

3.表达式封装:可以把表单数据封装中不同的实体类对象中。例如:把表单数据分别封装到User对象和Book对象中。

Book.java

package zh.action.demo;

public class Book {

	private Integer bookId;
	private String bookName;
	private double bookPrice;
	
	public Book(){
		
	}

	public Integer getBookId() {
		return bookId;
	}

	public void setBookId(Integer bookId) {
		this.bookId = bookId;
	}

	public String getBookName() {
		return bookName;
	}

	public void setBookName(String bookName) {
		this.bookName = bookName;
	}

	public double getBookPrice() {
		return bookPrice;
	}

	public void setBookPrice(double bookPrice) {
		this.bookPrice = bookPrice;
	}

	@Override
	public String toString() {
		return "Book [bookId=" + bookId + ", bookName=" + bookName
				+ ", bookPrice=" + bookPrice + "]";
	}
	
}

form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath}/formAction.action" method="post" enctype="application/x-www-form-urlencoded">
		
		<!-- 封装到User对象 -->
		用户名:<input type="text" name="user.username"><br/>
		密码:<input type="text" name="user.password"><br/>
		性别:<input type="radio" name="user.sex" value="man">男
		<input type="radio" name="user.sex" value="woman">女<br>
		爱好:<input type="checkbox" name="user.hobby" value="study">学习
		<input type="checkbox" name="user.hobby" value="music">音乐
		<input type="checkbox" name="user.hobby" value="sleep">睡觉<br/>
		
		<!-- 封装到Book对象 -->
		书编号:<input type="text" name="book.bookId"><br/>
		书名:<input type="text" name="book.bookName"><br/>
		书价格:<input type="text" name="book.bookPrice"><br/>
		
		<input type="submit" value="提交">
		<input type="reset" value="重置">
	</form>
</body>
</html>

FormAction.java

package zh.action.demo;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 封装表单数据
 * @author ZH
 */
public class FormAction extends ActionSupport {

	// 表达式封装:把表单数据封装到实体类对象
	// 要求1:在Action中声明实体类,并且生成setXXX()和getXXX()
	// 要求2:表单中,name属性值写法为:name="实体类对象.属性"
	
	// 声明User对象
	private User user;
	
	public void setUser(User user) {
		this.user = user;
	}
	
	public User getUser() {
		return user;
	}
	
	// 声明Book对象
	private Book book;
	
	public void setBook(Book book) {
		this.book = book;
	}
	
	public Book getBook() {
		return book;
	}

	// 以下,就可以直接输出user,user中个属性值对应各表单数据
	public String params() {
		
		System.out.println(user);
		// User [username=李逍遥, password=0011, sex=man, hobby=[study, sleep]]
		System.out.println(book);
		// Book [bookId=2233, bookName=仙剑奇侠传, bookPrice=100.88]
		return NONE;
		
	}

}

使用表达式封装方式,还可以将表单数据封装到List、Map.

【封装到List】

form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath}/formAction.action" method="post" enctype="application/x-www-form-urlencoded">
				
		用户名:<input type="text" name="userList[0].username"><br/>
		密码:<input type="text" name="userList[0].password"><br/>
		性别:<input type="radio" name="userList[0].sex" value="man">男
		<input type="radio" name="userList[0].sex" value="woman">女<br>
		爱好:<input type="checkbox" name="userList[0].hobby" value="study">学习
		<input type="checkbox" name="userList[0].hobby" value="music">音乐
		<input type="checkbox" name="userList[0].hobby" value="sleep">睡觉<br/>
		
		<hr>
		
		用户名:<input type="text" name="userList[1].username"><br/>
		密码:<input type="text" name="userList[1].password"><br/>
		性别:<input type="radio" name="userList[1].sex" value="man">男
		<input type="radio" name="userList[1].sex" value="woman">女<br>
		爱好:<input type="checkbox" name="userList[1].hobby" value="study">学习
		<input type="checkbox" name="userList[1].hobby" value="music">音乐
		<input type="checkbox" name="userList[1].hobby" value="sleep">睡觉<br/>
		
		<input type="submit" value="提交">
		<input type="reset" value="重置">
		
	</form>
</body>
</html>

FormAction.jsp

package zh.action.demo;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 封装表单数据到List
 * @author ZH
 */
public class FormAction extends ActionSupport {
	
	// 声明List,并生成setXXX()和getXXX()
	private List<User> userList;
	
	public void setUserList(List<User> userList) {
		this.userList = userList;
	}
	
	public List<User> getUserList() {
		return userList;
	}

	public String params() {
	
		for(User user : userList){
			System.out.println(user);
		}
//		User [username=李逍遥, password=19, sex=man, hobby=[sleep]]
//		User [username=赵灵儿, password=16, sex=woman, hobby=[study, music]]
		return NONE;
		
	}

}

【封装到Map】

form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath}/formAction.action" method="post" enctype="application/x-www-form-urlencoded">
		
		用户名:<input type="text" name="userMap['one'].username"><br/>
		密码:<input type="text" name="userMap['one'].password"><br/>
		性别:<input type="radio" name="userMap['one'].sex" value="man">男
		<input type="radio" name="userMap['one'].sex" value="woman">女<br>
		爱好:<input type="checkbox" name="userMap['one'].hobby" value="study">学习
		<input type="checkbox" name="userMap['one'].hobby" value="music">音乐
		<input type="checkbox" name="userMap['one'].hobby" value="sleep">睡觉<br/>
		
		<hr>
		
		用户名:<input type="text" name="userMap['two'].username"><br/>
		密码:<input type="text" name="userMap['two'].password"><br/>
		性别:<input type="radio" name="userMap['two'].sex" value="man">男
		<input type="radio" name="userMap['two'].sex" value="woman">女<br>
		爱好:<input type="checkbox" name="userMap['two'].hobby" value="study">学习
		<input type="checkbox" name="userMap['two'].hobby" value="music">音乐
		<input type="checkbox" name="userMap['two'].hobby" value="sleep">睡觉<br/>
		
		<input type="submit" value="提交">
		<input type="reset" value="重置">
		
	</form>
</body>
</html>

FormAction.java

package zh.action.demo;

import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 封装表单数据到Map
 * @author ZH
 */
public class FormAction extends ActionSupport {
	
	// 声明Map,并生成setXXX()和getXXX()
	private Map<String,User> userMap;
	
	public void setUserMap(Map<String,User> userMap) {
		this.userMap = userMap;
	}
	
	public Map<String,User> getUserMap() {
		return userMap;
	}

	public String params() {
	
		Set<Entry<String,User>> entrySet = userMap.entrySet();
		for(Entry<String,User> entry : entrySet){
			System.out.print(entry.getKey()+"=");
			System.out.println(entry.getValue());
		}
//		two=User [username=黄蓉, password=18, sex=woman, hobby=[music]]
//		one=User [username=郭靖, password=20, sex=man, hobby=[study, sleep]]
		return NONE;
		
	}

}

猜你喜欢

转载自blog.csdn.net/qq_41706150/article/details/80968475