struts2里的ModelDriven的简单使用

Struts 2不使用forms,而是将请求参数直接绑定到Action的字段。通过实现ModelDriven接口,可以简化数据收集,将页面数据映射到实体类。举例说明,UserAction实现ModelDriven接口,getModel()返回User对象。ModelDriven的工作原理依赖于ModelDrivenInterceptor,该拦截器检查Action是否实现了接口,然后将返回的对象放入ValueStack。
  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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值