1、属性驱动
①提供属性的set的方法的方式
- 适用于获取参数较少的情况(文件下载)
- struts2提供了类型转换
public class UserAction1 extends ActionSupport {
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"+username);
System.out.println("password"+password);
System.out.println("age"+age);
System.out.println("birthday"+birthday);
System.out.println("salary"+salary);
return NONE;
}
② 提供页面表达式
<h3>方式二:属性驱动-在页面中提供表达式</h3>
<s:fielderror></s:fielderror>
<form action="userDemo2.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>
public class UserAction2 extends ActionSupport {
//提供一个User对象
private User user;
//提供user的set、get方法 一定要提供set方法
//
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;
}
}
2、模型驱动
通过实现ModelDriven<Class.name>接口实现
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、复杂数据的封装
①封装到list集合中
页面:
<h3>方式一:封装到list集合中:批量插入商品</h3>
<form action="productDemo1.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="提交"><br/>
</form>
<h3>方式二:封装到Map集合中:批量插入商品</h3>
<form action="productDemo2.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="提交"><br/>
</form>
控制:方式一
public class ActionProduct extends ActionSupport{
private List<Product> products;
//提供集合的set、get方法
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
@Override
public String execute() throws Exception {
System.out.println(products);
return NONE;
}
}
控制:方式二
public class ProductAction2 extends ActionSupport{
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(key +" "+product);
}
return NONE;
}
}