Struts2的模型驱动、属性驱动的理解

因为在struts1的版本中,属性的拦截以及控制的处理是被封装为两个对立的ActionForm、Action来获取HttpServerRequest的参数、控制访问的MAPPING的。而在Struts2中我们可以直接通过Action来获取请求参数,并把处理的资源映射返回给struts.xml指向对应的视图资源或者模型或者控制器进行下一步的处理。发现Action在Struts2中负责了struts1的ActionForm以及Action的双重任务,那么、我们如果习惯了struts1的开放方式的,在Struts中提供,模型驱动的方式来分解Action的任务,这种模式是通过专门的JavaBean来封装请求。

Field-driven方式:直接在Action类中定义各种Java基本类型(包装类型)、String、Date类型的属性,这些属性名和页面表单输入域的名字一一对应。

Model-driven方式:通过领域模型JavaBean来进行数据传递。在Action类中定义一个领域模型JavaBean的对象,JavaBean所封装的属性与页面表单输入域的名字一一对应。把页面表单的数据直接封装到这个JavaBean中。

   我们来比较一下:属性驱动和模型驱动的区别

   属性驱动的例子:

[java]  view plain copy
  1. public class InputAction extends ActionSupport {  
  2.     private static final long serialVersionUID = 7513077180980272234L;  
  3.       
  4.     private String str;  
  5.     private int inte;  
  6.     private double dou;  
  7.     private char c;  
  8.     private boolean flag;  
  9.     private Date date;  
  10.       
  11.     public String getStr() {  
  12.         return str;  
  13.     }  
  14.     public void setStr(String str) {  
  15.         this.str = str;  
  16.     }  
  17.     public int getInte() {  
  18.         return inte;  
  19.     }  
  20.     public void setInte(int inte) {  
  21.         this.inte = inte;  
  22.     }  
  23.     public double getDou() {  
  24.         return dou;  
  25.     }  
  26.     public void setDou(double dou) {  
  27.         this.dou = dou;  
  28.     }  
  29.     public char getC() {  
  30.         return c;  
  31.     }  
  32.     public void setC(char c) {  
  33.         this.c = c;  
  34.     }  
  35.     public boolean isFlag() {  
  36.         return flag;  
  37.     }  
  38.     public void setFlag(boolean flag) {  
  39.         this.flag = flag;  
  40.     }  
  41.     public Date getDate() {  
  42.         return date;  
  43.     }  
  44.     public void setDate(Date date) {  
  45.         this.date = date;  
  46.     }  
  47.       
  48.     public String execute(){  
  49.         System.out.println(str);  
  50.         System.out.println(inte);  
  51.         System.out.println(dou);  
  52.         System.out.println(c);  
  53.         System.out.println(flag);  
  54.         System.out.println(date);  
  55.         return "succ";  
  56.     }  
  57. }  
   模型驱动例子:

[java]  view plain copy
  1. public class ModelDriverAction {  
  2.     private Account acc;  
  3.     public Account getAcc() {  
  4.         return acc;  
  5.     }  
  6.     public void setAcc(Account acc) {  
  7.         this.acc = acc;  
  8.     }         
  9.     public String execute(){  
  10.         System.out.println(acc);          
  11.         return "succ";  
  12.     }  
  13. }  


      其实,模型驱动必须实现ModelDriver接口,以及必须实现getMode()方法,该方法把Action和以及对应的Model实例关联。配置属性驱动和模型驱动的方式一样,在struts.xml文件中配置对应的Action即可,那他怎么实现的?

    那么,我们要看到Struts2是一个拦截器为核心的框架,在struts_default.xml文件里面可以发现对应的拦截器的设置。

   而我们在属性驱动模型下在JSP中访问属性时:

   <s:property value="str">

  而在模型驱动模型下在JSP中访问属性时:

  <s:property value ="acc.no">

    但是,Struts2会自动识别使用何种驱动模式,省略model.系统自动会关联到model.username的属性值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值