struts模型驱动和属性驱动
2016-08-26 18:37
239 查看
Struts2(四)属性驱动和模型驱动
2015-10-27 个评论
作者:温布利往事
收藏
我要投稿
一、概述
所谓模型驱动,就是使用单独的JavaBean实例贯穿整个MVC流程,与之相对应的属性驱动方式,则使用属性作为贯穿MVC流程的信息携带者。属性无法独立存下,它必须依附于一个对象,这个对象就是Action实例。简单来说,模型驱动使用单独的值对象来封装请求参数和处理结果,属性驱动则使用Action实例来封装请求参数和处理结果。
回到顶部
二、应用实例
以前文提到的LoginAction为例,在属性驱动中的action为:
而在模型驱动中,我们通常上述的action分解为如下两个类:
还提供一个包含处理逻辑的Action类:
从上述代码我们可以看到,在模型驱动模式中,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,一个对应表单提交的数据,另一个用于持久层。
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,一个对应表单提交的数据,另一个用于持久层。
相关文章推荐
- Struts-setter、getter方法自动 ActionSupport类-属性驱动+模型驱动
- struts属性驱动与模型驱动
- Struts属性和模型驱动
- struts学习(四)—属性封装、模型驱动封装和表达式封装
- Action接收参数的3种方式(属性,域模型,模型驱动,struts2.1.8)
- Struts的属性驱动和模型驱动
- struts同时使用属性注入和模型驱动注入数据注入失败原因分析及解决方法
- struts模型驱动和属性驱动冲突的问题
- JAVA -- Struts模型驱动和属性驱动
- ###struts模型驱动(必须new)能够封装【对象类型属性的属性】.页面传参错误导致的问题:HTTP Status 500 - could not execute statement;
- Struts中模型驱动与属性驱动共同使用可能会遇到的问题
- struts2 接受参数的两种方式(属性驱动和模型驱动)
- Struts属性驱动与模型驱动的区别
- Action接收参数的3种方式(属性,域模型,模型驱动,struts2.1.8)
- struts2学习笔记-模型驱动和属性驱动
- hello_world-2.3之简单设备驱动模型(三)---添加设备属性文件
- Struts 2 使用属性模型取checkbox 值出现问题解决方法。
- Struts2的属性驱动与模型驱动的区别
- Struts2的属性驱动与模型驱动的区别