struts2里的ModelDriven的简单使用

  1. Struts 2没有像Struts 1“forms”。在Struts 2请求中的参数直接绑定到字段操作类,在Action执行时这个类是放在堆栈的顶部的。
  2. 如果类实现的需要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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章