- Struts 2沒有像Struts 1“forms”。在Struts 2請求中的參數直接綁定到字段操作類,在Action執行時這個類是放在堆棧的頂部的。
- 如果類實現的需要com.opensymphony.xwork2.ModelDriven接口,那麼它需要從getModel()方法返回一個對象。
簡單的說,使用ModelDriven,可以直接把頁面數據的收集成實體類。
代碼舉例如下:
//一個POJO實體類
public class User {
private String name;//用戶登錄名
private String password;//用戶密碼
public User() {
super();
}
public User(String name, String password) {
super();
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
讓UserAction實現一個ModelDriven接口,同時實現接口中的方法:getModel()。
//Action方法
public class UserLoginAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
private UserLoginService userLoginService = new UserLoginServiceImpl();
public User getModel() {
return user;
}
public String login() throws Exception {
boolean loginUser = userLoginService.login(user);
if (loginUser) {
return "success";
} else {
return "login";
}
}
}
Action中需要引入的頭文件有:
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
ps:jsp正常按名傳參數就可以了
機制解釋:ModelDriven的實現依靠ModelDrivenInterceptor(struts2攔截器鏈的一部分)。
當一個請求經過ModelDrivenInterceptor的時候,在這個攔截器中,會判斷當前要調用的Action對象是否實現了ModelDriven接口,如果實現了這個接口,則調用getModel()方法,並把返回值(本例是返回user對象)壓入ValueStack。