zoukankan      html  css  js  c++  java
  • Struts2之ModelDriven的使用

    Java代码 
    我们可以根据Action属性的不同将它分为两类:Field-Driven(属性驱动)Action和Model-Driven(模型驱动)Action。 

    一、Field-Driven(属性驱动)Action,Action拥有自己的属性,这些属性一般是Java的基本类型。表单字段直接和Action的属性对应。 
    二、实现了modelDriven接口可以在action中直接获得例如User对象,它会将ObjectgetModel()取得的User放到ValueStack中。可以理解为将这个User的属性追加到Action中。它主要是作用是实现类似Struts的FormBean功能。 

    在struts2中,提供了一种直接使用领域对象的方式,就是让action实现com.opensymphony.xwork2.ModelDriven接口,ModelDriven让你可以直接操作应用程序中的领域对象,允许你在web层和业务层使用相同的对象。 

    ModelDriven接口只有一个方法 

    public  Object  getModel(){ 
    return null; 
    } 

    该方法返回一个用于接收用户输入数据的对象模型,在这个模型对象中的属性可以直接通过(属性名)userName来访问,而不需要使用(对象名.属性名)user.userName这种格式来访问了,在action也不需要对对象提供getter和setter方法了,但是必须要在action中进行new操作 
    如下 :

     1 //ModelDriven要使用泛型哦 
     2 
     3 public class LoginAction extends ActionSupport implements ModelDriven<User>{ 
     4 
     5 private static final long serialVersionUID=-6434128483294080524L; 
     6 
     7 //这里必须要new 
     8 private User user=new User(); 
     9 public String login() throws Exception{ 
    10 //TODOAuto-generatedmethodstub 
    11 return SUCCESS; 
    12 } 
    13 
    14 //这里是实现接口方法 
    15 
    16 @Override
    17 public User getModel(){ 
    18 //TODOAuto-generatedmethodstub 
    19 
    20 //别忘记了,要把返回值写上哦 
    21 return user; 
    22 } 
    23 }

    这样一个ModelDriven就实现完毕了 

    和属性驱动的Action有很大的区别,下面一一列举: 

    (1)模型驱动的Action必须实现ModelDriven接口,而且要提供相应的泛型,这里当然就是具体使用的JavaBean了。 

    (2)实现ModelDriven的getModel方法,其实就是简单的返回泛型的一个对象。 

    (3)在Action提供一个泛型的私有对象,这里就是定义一个User的user对象,并提供相应的getter与setter。 

    好了,上面的三件事做完之后,Action就会去自动调用User的setter将表单中的name属性的值赋给User中的属性。而Action的后续处理的Jsp页面后者是Servlet就可以使用user对象了。 

    到底是用属性驱动和是模型驱动呢?  

    (1)请你统一整个系统中的Action使用的驱动模型,即要么都是用属性驱动,要么都是用模型驱动。 

    (2)如果你的DB中的持久层的对象与表单中的属性都是一一对应的话,那么就使用模型驱动吧,毕竟看起来代码要整洁得多。 

    (3)如果表单的属性不是一一对应的话,那么就应该使用属性驱动,否则,你的系统就必须提供两个Bean,一个对应表单提交的数据,另一个用与持久层。

  • 相关阅读:
    Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)
    文件内容操作篇clearerr fclose fdopen feof fflush fgetc fgets fileno fopen fputc fputs fread freopen fseek ftell fwrite getc getchar gets
    文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write
    嵌入式linux应用程序调试方法
    version control system:git/hg/subversion/cvs/clearcase/vss。software configruation management。代码集成CI:Cruisecontrol/hudson/buildbot
    最值得你所关注的10个C语言开源项目
    如何记录linux终端下的操作日志
    CentOS 5.5 虚拟机安装 VirtualBox 客户端增强功能
    sizeof, strlen区别
    C/C++嵌入式开发面试题
  • 原文地址:https://www.cnblogs.com/weitangmonkey/p/5162438.html
Copyright © 2011-2022 走看看