Struts2数据封装
- 2019 年 10 月 7 日
- 筆記
首先是简单数据类型的封装
jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Title</title> </head> <body> <h1>Sturts2的数据封装</h1> <h3>方式一:属性驱动-提供set方法的方式</h3> <s:fielderror/> <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="date" 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/> 密码:<input type="password" name="user.password"><br/> 年龄:<input type="text" name="user.age"><br/> 生日:<input type="date" 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="date" name="birthday"><br/> 工资:<input type="text" name="salary"><br/> <input type="submit" value="提交"> </form> </body> </html>
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="demo2" extends="struts-default" namespace="/"> <global-results> <result name="input">/</result> </global-results> <action name="userAction1" class="com.jinke.domain.UserAction1"/> <action name="userAction2" class="com.jinke.domain.UserAction2"/> <action name="userAction3" class="com.jinke.domain.UserAction3"/> </package> </struts>
实体类
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 + '}'; } }
简单数据封装的三种方式
import com.opensymphony.xwork2.ActionSupport; import java.util.Date; /** * 数据封装的方式一:提供属性的set方法 */ public class UserAction1 extends ActionSupport { private String username; private String password; private Integer age; private Date birthday; private Double 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; } 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; } }
import com.opensymphony.xwork2.ActionSupport; /** * 数据封装的方式二:属性驱动-在页面中提供表达式的方式 */ public class UserAction2 extends ActionSupport { //提供一个User对象 private User user; public void setUser(User user) { this.user = user; } public User getUser() { return user; } @Override public String execute() throws Exception { System.out.println(user.toString()); return NONE; } }
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; /** * 数据封装的方式三:模型驱动的方式 */ public class UserAction3 extends ActionSupport implements ModelDriven<User> { private User user = new User();//手动实例化User @Override public String execute() throws Exception { System.out.println(user.toString()); return NONE; } //模型驱动需要使用的方法 @Override public User getModel() { return user; } }
结果
下面是复杂数据类型的封装
jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>Struts2复杂类型的数据封装</h1> <h3>封装到List集合中:批量插入商品</h3> <form action="${pageContext.request.contextPath}/productAction1.action" method="post"> 商品名称:<input type="text" name="products[0].name"><br/> 商品价格:<input type="text" name="products[0].price"><br/> 商品名称:<input type="text" name="products[1].name"><br/> 商品价格:<input type="text" name="products[1].price"><br/> 商品名称:<input type="text" name="products[2].name"><br/> 商品价格:<input type="text" name="products[2].price"><br/> <input type="submit" value="提交"> </form> <h3>封装到Map集合中:批量插入商品</h3> <form action="${pageContext.request.contextPath}/productAction2.action" method="post"> 商品名称:<input type="text" name="map['one'].name"><br/> 商品价格:<input type="text" name="map['one'].price"><br/> 商品名称:<input type="text" name="map['two'].name"><br/> 商品价格:<input type="text" name="map['two'].price"><br/> 商品名称:<input type="text" name="map['three'].name"><br/> 商品价格:<input type="text" name="map['three'].price"><br/> <input type="submit" value="提交"> </form> </body> </html>
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="demo3" extends="struts-default" namespace="/"> <action name="productAction1" class="com.jinke.product.ProductAction1"/> <action name="productAction2" class="com.jinke.product.ProductAction2"/> </package> </struts>
实体类
public class Product { private String name; private Double price; public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } @Override public String toString() { return "Product{" + "name='" + name + ''' + ", price=" + price + '}'; } }
数据保存到List中
import com.opensymphony.xwork2.ActionSupport; import java.util.List; /** * 负责类型数据封装到List中 */ public class ProductAction1 extends ActionSupport { private List<Product> products; public void setProducts(List<Product> products) { this.products = products; } public List<Product> getProducts() { return products; } @Override public String execute() throws Exception { for (Product product : products) { System.out.println(product); } return NONE; } }
数据保存到Map中
import com.opensymphony.xwork2.ActionSupport; import java.util.Map; /** * 负责类型数据封装到Map中 */ public class ProductAction2 extends ActionSupport { private Map<String, Product> map; public Map<String, Product> getMap() { return map; } public void setMap(Map<String, Product> map) { this.map = map; } @Override public String execute() throws Exception { for (String key : map.keySet()) { Product product = map.get(key); System.out.println(product.toString()); } return NONE; } }
结果