- 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。