struts2的action封装数据的三种方式:
1 action自己属于modle 属于属性驱动
public class Regist extends ActionSupport{
private String usename;
private String password;
private int age;
@Override
public String execute() throws Exception {
//这里的action可自动接受数据,至关于modle
return super.execute();
}
public void setUsename(String usename) {
this.usename = usename;
}
public void setPassword(String password) {
this.password = password;
}
public void setAge(int age) {
this.age = age;
}
}
一在struts2中,action是多实例的,不存在线程问题
二须要单独使用javabean将数据传到业务层java
2 将属性封装到action的model成员变量:(属性驱动)
代码体现:
public class Regist extends ActionSupport{
private User user;
public String execute() throws Exception {
//这里的action可自动接受数据
return super.execute();
}
public void setUser(User user) {
this.user = user;
}
//必须提供get方法,不然没法获取到model对象
public User getUser() {
return user;
}
}
jsp页面上交时的代码体现:
<input type="txt" name="user.username"/>jsp
3 使用ModelDriven接口,对请求数据进行封装 (模型驱动)
public class Regist extends ActionSupport implements ModelDriven<User>{\
//必须手动实例化
private User user=new User();
public String execute() throws Exception {
return NONE;
}
@Override
public User getModel() {
return user;
}
}ide
4 封装复杂类型参数(集合类型 Collection 、 Map)
1) 封装数据到Collection 对象
页面:
产品名称 <input type="text" name="products[0].name" /><br/>
产品价格 <input type="text" name="products[0].price" /><br/>
Action :
public class ProductAction extends ActionSupport {
private List<Product> products;
public List<Product> getProducts() {
return products;
}this
public void setProducts(List<Product> products) {
this.products = products;
}
}
2) 封装数据到Map 对象
页面:
产品名称 <input type="text" name="map['one'].name" /><br/> ======= one是map的键值
Action :
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;
}
}接口