您的位置:首页 > 编程语言 > Java开发

struts模型驱动和属性驱动

2016-08-26 18:37 239 查看
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,一个对应表单提交的数据,另一个用于持久层。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: