编写一个实体类 User
package czm.struts2.domain;
import java.util.Date;
public class User {
private String username;
private String password;
private Integer age;
private Date birthday;
private Double salary;
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", age=" + age + ", birthday=" + birthday
+ ", salary=" + salary + "]";
}
}
方式一:属性驱动:提供属性set方法的方式(不常用)
1 、编写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>
<h1>Struts2的数据封装</h1>
<h3>方式一:属性驱动-提供set方法的方式</h3>
<form action="${ pageContext.request.contextPath }/userAction1.action" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"><br/>
年龄:<input type="text" name="age"/><br/>
生日:<input type="text" name="birthday"/><br/>
工资:<input type="text" name="salary"/><br/>
<input type="submit" value="注册">
</form>
</body>
</html>
2 、编写 Action 类(提供对应的属性及set方法)
package czm.struts2.demo2;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
import czm.struts2.domain.User;
/**
* 数据封装的方式一:提供属性的set方法的方式
* @author ASUS
*
*/
public class UserAction1 extends ActionSupport {
//提供对应的属性及set方法 接收数据
private String username;
private String password;
private Integer age;
private Date birthday;
private Double salary;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setAge(Integer age) {
this.age = age;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public void setSalary(Double salary) {
this.salary = salary;
}
@Override
public String execute() throws Exception {
// 输出打印接收的数据
System.out.println(username);
System.out.println(password);
System.out.println(age);
System.out.println(birthday);
System.out.println(salary);
// 封装数据:
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setAge(age);
user.setBirthday(birthday);
user.setSalary(salary);
return NONE;
}
}
3 、编写xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo2" extends="struts-default" namespace="/">
<!-- 属性驱动:提供属性set方法的方式配置 -->
<action name="userAction1" class="czm.struts2.demo2.UserAction1">
</action>
</package>
</struts>
4 、访问 JSP 页面
5 、输入数据,点击注册
获取到输入信息完成封装:
方式二:属性驱动:在页面中提供表达式的方式
1 、编写JSP页面(在name属性值中 提供了表达式,如 name="user.username")
<%@ 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>
<h1>Struts2的数据封装</h1>
<h3>方式一:属性驱动-提供set方法的方式</h3>
<form action="${ pageContext.request.contextPath }/userAction1.action" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"><br/>
年龄:<input type="text" name="age"/><br/>
生日:<input type="text" name="birthday"/><br/>
工资:<input type="text" name="salary"/><br/>
<input type="submit" value="注册">
</form>
<h3>方式二:属性驱动-在页面中提供表达式方式</h3>
<form action="${ pageContext.request.contextPath }/userAction2.action" method="post">
用户名:<input type="text" name="user.username"/><br/> <!-- 在name属性值中 提供了表达式 -->
密码:<input type="password" name="user.password"><br/>
年龄:<input type="text" name="user.age"/><br/>
生日:<input type="text" name="user.birthday"/><br/>
工资:<input type="text" name="user.salary"/><br/>
<input type="submit" value="注册">
</form>
</body>
</html>
2 、编写 Action 类 (创建一个 User 对象)
package czm.struts2.demo2;
import com.opensymphony.xwork2.ActionSupport;
import czm.struts2.domain.User;
/**
* 数据封装的方式二 :属性驱动-在页面中提供表达式的方式
* @author ASUS
*
*/
public class UserAction2 extends ActionSupport{
// 提供一个User对象:
private User user;
// 提供user的set和get方法:一定要提供get方法。
// 因为拦截器完成数据封装,需要创建User对象。通过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 、编写xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo2" extends="struts-default" namespace="/">
<!-- 属性驱动:提供属性set方法的方式配置 -->
<action name="userAction1" class="czm.struts2.demo2.UserAction1"></action>
<!-- 属性驱动:在页面中提供表达式的方式配置 -->
<action name="userAction2" class="czm.struts2.demo2.UserAction2"></action>
</package>
</struts>
4 、访问 JSP 页面
5 、输入数据,点击注册
获取到输入信息完成封装:
方式三:模型驱动-采用模型驱动的方式(常用)
1 、编写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>
<h1>Struts2的数据封装</h1>
<h3>方式一:属性驱动-提供set方法的方式</h3>
<form action="${ pageContext.request.contextPath }/userAction1.action" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"><br/>
年龄:<input type="text" name="age"/><br/>
生日:<input type="text" name="birthday"/><br/>
工资:<input type="text" name="salary"/><br/>
<input type="submit" value="注册">
</form>
<h3>方式二:属性驱动-在页面中提供表达式方式</h3>
<form action="${ pageContext.request.contextPath }/userAction2.action" method="post">
用户名:<input type="text" name="user.username"/><br/> <!-- 在name属性值中 提供了表达式 -->
密码:<input type="password" name="user.password"><br/>
年龄:<input type="text" name="user.age"/><br/>
生日:<input type="text" name="user.birthday"/><br/>
工资:<input type="text" name="user.salary"/><br/>
<input type="submit" value="注册">
</form>
<h3>方式三:模型驱动-模型驱动方式</h3>
<form action="${ pageContext.request.contextPath }/userAction3.action" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"><br/>
年龄:<input type="text" name="age"/><br/>
生日:<input type="text" name="birthday"/><br/>
工资:<input type="text" name="salary"/><br/>
<input type="submit" value="注册">
</form>
</body>
</html>
2 、编写 Action 类(实现ModelDriven 接口---- implements ModelDriven<User>)
package czm.struts2.demo2;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import czm.struts2.domain.User;
/**
* 数据封装的方式三:模型驱动-采用模型驱动的方式
* @author ASUS
*
*/
public class UserAction3 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;
}
}
3 、编写xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo2" extends="struts-default" namespace="/">
<!-- 属性驱动:提供属性set方法的方式的配置 -->
<action name="userAction1" class="czm.struts2.demo2.UserAction1"></action>
<!-- 属性驱动:在页面中提供表达式的方式的配置 -->
<action name="userAction2" class="czm.struts2.demo2.UserAction2"></action>
<!-- 模型驱动-采用模型驱动的方式的配置 -->
<action name="userAction3" class="czm.struts2.demo2.UserAction3"></action>
</package>
</struts>
4 、访问 JSP 页面
5 、输入数据,点击注册
备注:
模型驱动方式是最常用的方式: 缺点:只能同时向一个对象中封装数据。
但使用属性驱动:在页面中提供表达式的方式可以向多个对象中同时封装数据