文档章节

struts2之ModelDriven

乐在克里特
 乐在克里特
发布于 2017/02/24 13:45
字数 715
阅读 3
收藏 0

在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

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 15
博文 268
码字总数 394729
作品 0
杭州
程序员

暂无文章

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
9
3
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
4
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
2
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部