`

struts2之ModelDriven

阅读更多

在Struts 2中,提供了另外一种直接使用领域对象的方式,就是让action实现com.opensymphony. xwork2.ModelDriven接口。ModelDriven让你可以直接操作应用程序中的领域对象(模型对象),允许你在Web层和业务逻辑层使用相同的对象。

ModelDriven接口中只有一个方法,如下:

@override
public T getModel();

 

方法返回一个用于接收用户输入数据的模型对象

 在页面中,这个模型对象中的属性可以直接通过属性名来访问(如username),而不需要使用形如“user.username”这种格式的表达式,在action中也不需要为这个模型对象提供JavaBean风格的getter和setter方法。但是必须要在action中进行new操作,ModelDriven要使用泛型。

下面我们让在3.1节创建的LoginAction类实现ModelDriven接口,修改后的代码如例3-7所示。

例3-7 LoginAction.java

[java] view plain?
  1. package org.sunxin.struts2.ch03.action;  
  2. import org.sunxin.struts2.ch03.model.User;  
  3. import com.opensymphony.xwork2.Action;  
  4. import com.opensymphony.xwork2.ModelDriven;  
  5. public class LoginAction implements Action,ModelDriven<User>  
  6. {   
  7. private User user = new User();  
  8.  @Override  
  9. public String execute() throws Exception  
  10. {  
  11. …  
  12. //省略  
  13. }  
  14.  @Override  
  15. public User getModel()  
  16. {  
  17. return user;  
  18. }  
  19. }  

修改login.jsp,修改后的代码如例3-8所示。

例3-8 login.jsp 

[xhtml] view plain?
  1. …  
  2. <form action="login.action" method="post">  
  3. <table>  
  4. <tr>  
  5. <td>用户名:</td>  
  6. <td><input type="text" name="username"></td>  
  7. </tr>  
  8. <tr>  
  9. <td>密码:</td>  
  10. <td><input type="password" name="password"></td>  
  11. </tr>  
  12. <tr>  
  13. <td><input type="reset" value="重填"></td>  
  14. <td><input type="submit" value="登录"></td>  
  15. </tr>  
  16. </table>  
  17. </form>  
  18. …  

LoginAction实现了ModelDriven接口,表单字段就不需要再使用“user.”前缀了。

修改success.jsp,修改后的代码如例3-9所示。

例3-9 success.jsp

[xhtml] view plain?
  1. …  
  2. <body>  
  3. <h3><s:property value="username" />,欢迎您登录程序员之家网站(www.sunxin.org)。</h3>  
  4. </body>  
  5. …  

那么什么时候应该直接使用领域对象,什么时候应该实现ModelDriven接口呢?

这两种方式实际上并没有本质的区别,对于大多数的应用,使用任何一种方式都可以。

 

此外,注意区别field-driven/model-driven:

field-driven:
属性驱动,action拥有自己的属性,这些属性一般是java的基本类型,并且提供属性的getter和setter方法。表单字段直接和action的属性对应。

private UserModel um;  
public void setUm(UserModel um){  
    this.um = um;  
}  
public UserModel getUm(){
    return this.um;
} 

 在jsp页面中,id:<input type=“text” name=“um.id”>  中间的um.id就是基于field-driven取值的。

model-driven:
实现了ModelDriven接口可以在action中直接获得例如User对象,它会将表单字段自动封装到所需对象(如User)里去。使用ModelDriven必须实现泛型的getModel方法,并实现泛型实例。 

public class GroupAction implements ModelDriven<Group>{
   private Group group;
   public Group getGroup() {
      return group;
    }
   public void setGroup(Group group) {
      this.group = group;
   }
   @Override
   public Group getModel() {
      if(group==null) group = new Group();
      return group;
   }
   public String addInput() {
      //处理
      return "success";
   }
}

  

http://blog.csdn.net/heyutao007/article/details/5980607

加深理解可以再看:

http://www.cnblogs.com/Topless/archive/2012/01/17/2324980.html

区别field-driven/model-driven:

http://blog.sina.com.cn/s/blog_8b3c701b010103it.html

分享到:
评论

相关推荐

    Struts2_ModelDriven接收参数(项目案例及视频)

    Struts2_ModelDriven接收参数(项目案例及视频) 初学者必备.

    Struts2接收参数ModelDriven

    NULL 博文链接:https://diaochenlong2.iteye.com/blog/1829436

    struts2传递参数及ModelDriven的使用示例

    刚开始学struts2时,自己写的小工程。

    ModelDriven

    ModelDriven用法 拦截器 struts2

    struts2中action实现ModelDriven后无法返回json的解决方法

    struts2中action实现ModelDriven后无法返回json的解决方法,需要的朋友可以参考一下

    Struts2_Action学习笔记、通配符{1},{2}

    Struts2_Action学习笔记、通配符{1},{2}......

    Struts2 in action中文版

    第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 为什么使用框架 8 1.3 Struts 2框架...

    Java struts2 Spring 整合文档附加演示工程

    2.struts2_2 validationl,ModelDriven,properties 3.struts2_interceptor 拦截器,自定义拦截器 4.struts2_log4j 5.struts2_spring struts spring 整合 以上功能包含完整示例代码 Eclipse Java EE IDE for Web ...

    SSH笔记_ModelDriven_Prepareable

    struts2的ModelDriven和Prepareable接口使用demo,包括显示数据,增加数据,删除数据和修改数据

    strusts2包struts2-rest-showcase-2.1.8.war实现ModelDriven接口项目心得

    自己的总结 还很不全面希望对你您有用 主要是控制url

    Struts2 学习笔记

    01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 ...

    Struts2 struts-2.3.16.1版本下的demo

    纯Struts2 struts-2.3.16.1版本下的demo,1、Struts2标签 2、Action 3、ActionSupport中validate 4、prepare 5、modeldriven 6、国际化 7、Token 8、拦截器

    Struts2帮助```````

    01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 ...

    struts2传值

    传值问题 在其中取值的方法有两种: #+映射名, 直接写映射名。 1.不加#的方式获取(所有对象放置在栈顶): a.XXaction中有该字段的成员变量. b.XXaction中该对象返回个给...页面struts2标签保存的数据也需要使用#来获取

    struts2的注解及通配符的简单实例

    public class UserAction implements ModelDriven{ private User user = new User(); public User getModel() { return user; } public String getUsers(){ System.out.println(user.getUserName()); ...

    struts+spring+hibernate整合

    Spring4.0、Struts2.3.15、Hibernate4.2.4、jQuery1.9.1涉及到了诸多开发时的细节:ModelDriven、Preparable 拦截器、编写自定义的类型转换器、Struts2 处理 Ajax、OpenSessionInViewFilter、迫切左外连接、Spring ...

    eclipse下struts2+spring+ibatis例子

    参考一下链接,修改了下,做了个例子 http://shiningwu.javaeye.com/blog/184117 差别在于action没有继承ModelDriven,并且把所有需要的jar包都打包了,实现了登陆,修改,删除,一览功能 工具为mysql + tomcat6

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    客户关系管理系统框架搭建(二)

    * struts2需要的jar包 * jstl 需要的jar包 * junit需要的jar包 * 包的介绍 * cn.itcast.crm.container:重新封装spring容器 * cn.itcast.crm.dao:放置的是dao接口 * cn.itcast.crm.dao.impl:放置的是dao接口...

Global site tag (gtag.js) - Google Analytics