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