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