struts模型驱动和属性驱动

本文对比了Struts2框架中的两种核心模式——模型驱动与属性驱动,通过具体示例阐述了它们的区别及应用场景。模型驱动采用单独的JavaBean贯穿MVC流程,而属性驱动则依赖Action实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts2(四) 属性驱动和模型驱动
2015-10-27        个评论       作者:温布利往事
收藏     我要投稿
一、概述
  所谓模型驱动,就 使用单独 JavaBean实例贯穿整个MVC流程,与之相对应 的属性驱动方式,则使用属性作为贯穿MVC流程 信息携带者。属性无法独立存下,它必须依附于一个对象,这个对象就 Action实例。简单来说,模型驱动使用单独 值对象来封装请求参数和处理结果, 属性驱动则使用Action实例来封装请求参数和处理结果。
 
回到顶部
二、应用实例  
  以前文提到 LoginAction为例,在 属性驱动action为:
 
 
public class LoginAction extends ActionSupport
{
    private static final long serialVersionUID = -5377305857336513025L;
    private String username;
    private String password;
    public String getUsername()
    {
        return username;
    }
    public void setUsername(String username)
    {
        this.username = username;
    }
    public String getPassword()
    {
        return password;
    }
    public void setPassword(String password)
    {
        this.password = password;
    }
    @Override
    public String execute() throws Exception
    {
        if(getUsername().equals("xujian")&&getPassword().equals("123456"))
        {
            ActionContext.getContext().getSession().put("user", username);
            return SUCCESS;
        }
        else
            return ERROR;
    }
}

 

 
 
  而在模型驱动中,我们通常上述 action分解为如下两个类:
 
 
/*
 * 用于封装请求参数和处理结果
 */
public class UserBean
{
    private String username;
    private String password;
    private String tip;
    public String getUsername()
    {
        return username;
    }
    public void setUsername(String username)
    {
        this.username = username;
    }
    public String getPassword()
    {
        return password;
    }
    public void setPassword(String password)
    {
        this.password = password;
    }
    public String getTip()
    {
        return tip;
    }
    public void setTip(String tip)
    {
        this.tip = tip;
    }
}

 

 
 
  还提供一个包含处理逻辑 Action类:
 
 
public class LoginAction implements Action,ModelDriven<UserBean>
{
    private UserBean model=new UserBean();
    @Override
    public UserBean getModel()
    {
        return model;
    }
    @Override
    public String execute() throws Exception
    {
        if(getModel().getUsername().equals("xujian")&&getModel().getPassword().equals("123"))
            
        {
            getModel().setTip("哈哈,登录成功");
            return SUCCESS;
        }
        else
            return ERROR;
    }
}

 

 
   从上述代码我们可以看到,在模型驱动模式中,Action必须 实现ModelDriven接口,并 实现getModel()方法,该方法用于把Action和与之对应 Moel实例关联起来。
 
  在struts-default.xml文件中,我们看到该文件配置了两个拦截器引用params和modelDriven,其中params拦截器负责提取请求参数,如果使用 属性驱动模式,还负责将请求参数传递给Action实例 属性,而modelDriven拦截器负责将请求参数传递给模型 属性。
 
 <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
 <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
回到顶部
三、总结
  模型驱动和 属性驱动各有利弊,模型驱动结构清晰,但 编程繁琐, 属性驱动则编程简洁,但 结构不够清晰。
 
  通常情况下,如果表单 属性不 一一对应 话,那么就应该使用 属性驱动,否则你 系统就必须提供两个Bean,一个对应表单提交 数据,另一个用于持久层。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值