频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
Struts2(四)属性驱动和模型驱动
2015-10-27 09:56:08           
收藏   我要投稿
一、概述

  所谓模型驱动,就是使用单独的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,一个对应表单提交的数据,另一个用于持久层。

点击复制链接 与好友分享!回本站首页
相关TAG标签 属性 模型
上一篇:实例演示如何在spring4.2.2中集成hibernate5.0.2并创建sessionFactory
下一篇:hibernate存取中文出现乱码
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站