Struts2-属性驱动与模型驱动的理解



Struts2 - 属性驱动与模型驱动

 

一、为什么要使用属性驱动和模型驱动?

         :struts2与struts很大的不同点在于,struts的execute方法提供了HttpServletRequest和  

    HttpServletResponse方法在获取客户端提交的数据信息的时候需要使用HttpServletRequest的

    getParameter()方法,并且还需要进行必要的数据类型转换。如何客户端提交的数据量大的时候,我们则

    需要写很多的getParameter方法。这样代码量就相应的增加不少。但是struts2为我们提供了属性驱动和模

    型驱动,它不需要我们写很多的获取值的方法。而只需要我们在Action中定义相应的getter方法,在界面上以

    Action中的变量名作为表单元素的name属性值即可。

二、属性驱动和模型驱动有什么异同?

 1.属性驱动

:对于属性驱动,我们需要在Action中定义与表单元素对应的所有的属性,因而在Action中会出现很多的

getter和setter方法

 2.模型驱动

:对于模型驱动,使用的Action对象需要实现ModelDriven接口并给定所需要的类型.而在Action中我们只需

要定义一个封装所有数据信息的javabean

 3.属性和模型驱动的相同点

:当我们使用属性驱动和模型驱动的时候,必须将表单的元素中的name属性值与我们定义接收数据信息的变量

 名对应起来。

 

 

三、如何使用属性驱动?

:对于属性驱动的实现是非常简单的 ,实例如下:

action:

Java代码   收藏代码
  1.     package org.viancent.action;  
  2.         import java.util.Date;  
  3.     import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5.     public class GetFieldAction extends ActionSupport {  
  6.             private String pname;  
  7.             private String address;  
  8.             private int age;  
  9.             private Date date;  
  10.   
  11.             public String getPname() {  
  12.                 return pname;  
  13.             }  
  14.   
  15.             public void setPname(String pname) {  
  16.                 this.pname = pname;  
  17.             }  
  18.   
  19.             public String getAddress() {  
  20.                 return address;  
  21.             }  
  22.                   
  23.                     public void setAddress(String address) {  
  24.                 this.address = address;  
  25.             }  
  26.   
  27.             public int getAge() {  
  28.                 return age;  
  29.             }  
  30.   
  31.             public void setAge(int age) {  
  32.                 this.age = age;  
  33.             }  
  34.   
  35.             public Date getDate() {  
  36.                 return date;  
  37.             }  
  38.   
  39.             public void setDate(Date date) {  
  40.                 this.date = date;  
  41.             }  
  42.                       
  43.             @Override  
  44.             public String execute() throws Exception {  
  45.                 return SUCCESS;  
  46.                       }  
  47. }  

 

Java代码   收藏代码
  1. JSP:(register.jsp)  
  2.     <div>  
  3.     <form action="/struts2/register.action" method="post">  
  4.         <table width="80%" align="center">  
  5.     <tr>  
  6.         <td>UserName:</td>  
  7.         <td><input type="text" name="pname" id="pname"/>       </td>  
  8.     </tr>  
  9.     <tr>  
  10.         <td>PassWord:</td>  
  11.         <td><input type="text" name="address" id="address"/></td>  
  12.     </tr>  
  13.     <tr>  
  14.         <td>Age:</td>  
  15.         <td><input type="text" name="age" id="age"/></td>  
  16.     </tr>  
  17.     <tr>  
  18.         <td>Date</td>  
  19.         <td><input type="text" name="date" id="date"/></td>  
  20.     </tr>  
  21.     <tr>  
  22.         <td colspan="2"><input type="submit" value="submit"/></td>  
  23.     </tr>  
  24.     </table>  
  25. </form>  
  26. </div>  
  27.               
  28. //其他配置信息,相同  

  四、模型驱动

:模型驱动有三点不同

1.所属的Action需要实现ModelDriven接口,并且给定类型和实现接口中的getModel方法

2.需要一个封装所有属性的javabean(对应 1.中的给给定类型)

3.在struts.xml文件中描述此Action的地方让该Action实现一个拦截器 (ModelDrivenInterceptor)

:具体实例如下:

Java代码   收藏代码
  1. JavaBean(person)  
  2. package org.viancent.domain;  
  3. import java.util.Date;  
  4. public class Person {  
  5.         private String pname;  
  6.         private int page;  
  7.         private String address;  
  8.         private Date date;  
  9.   
  10.     public Date getDate() {  
  11.             return date;  
  12.     }  
  13.   
  14.     public void setDate(Date date) {  
  15.             this.date = date;  
  16.     }  
  17.   
  18.     public String getPname() {  
  19.             return pname;  
  20.     }  
  21.   
  22.     public void setPname(String pname) {  
  23.             this.pname = pname;  
  24.     }  
  25.   
  26.     public int getPage() {  
  27.             return page;  
  28.     }  
  29.   
  30.     public void setPage(int page) {  
  31.             this.page = page;  
  32.     }  
  33.   
  34.     public String getAddress() {  
  35.             return address;  
  36.     }  
  37.   
  38.     public void setAddress(String address) {  
  39.             this.address = address;  
  40.     }  
  41. }  

 

Action:(RegisterAction)

Java代码   收藏代码
  1. package org.viancent.action;  
  2. import org.viancent.domain.Person;  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import com.opensymphony.xwork2.ModelDriven;  
  5.   
  6. public class RegisterAction extends ActionSupport implements  
  7. ModelDriven<Person/*这里需要填写Person对象*/> {  
  8.                   
  9.     private Person person =  new Person();   
  10.               //定义Person对象用于承载getModel()方法返回的数据信息  
  11.        //同时这里必须实例化对象,否则person的对象会为空  
  12.                   
  13.     public Person getPerson() {   
  14.                //实现person的getter方法,用于当请求转发后,其他界面数据访问  
  15.             return person;  
  16.     }  
  17.   
  18.     @Override  
  19.     public Person getModel() {  
  20.               //重写ModleDriven的方法,返回定义的person对象  
  21.             return person;  
  22.     }  
  23.   
  24.     @Override  
  25.     public String execute() throws Exception {   
  26.               //实现跳转            
  27.              System.out.println(person.getPage()+""+person.getDate());  
  28.                  return SUCCESS;  
  29.         }  
  30. }  

 struts.xml:

Java代码   收藏代码
  1. <action name="register"class="org.viancent.action.RegisterAction">  
  2.     <result name="success">/result.jsp</result>  
  3.         <result name="input">/show.jsp</result>  
  4.         <interceptor-ref name="modelDriven"></interceptor-ref>  
  5.                  //实现模型驱动的拦截器  
  6.         <interceptor-ref name="defaultStack"></interceptor-ref>  
  7. </action>  

 JSP(register.jsp)

如上:属性驱动的JSP界面

Struts2 - 属性驱动与模型驱动

 

一、为什么要使用属性驱动和模型驱动?

         :struts2与struts很大的不同点在于,struts的execute方法提供了HttpServletRequest和  

    HttpServletResponse方法在获取客户端提交的数据信息的时候需要使用HttpServletRequest的

    getParameter()方法,并且还需要进行必要的数据类型转换。如何客户端提交的数据量大的时候,我们则

    需要写很多的getParameter方法。这样代码量就相应的增加不少。但是struts2为我们提供了属性驱动和模

    型驱动,它不需要我们写很多的获取值的方法。而只需要我们在Action中定义相应的getter方法,在界面上以

    Action中的变量名作为表单元素的name属性值即可。

二、属性驱动和模型驱动有什么异同?

 1.属性驱动

:对于属性驱动,我们需要在Action中定义与表单元素对应的所有的属性,因而在Action中会出现很多的

getter和setter方法

 2.模型驱动

:对于模型驱动,使用的Action对象需要实现ModelDriven接口并给定所需要的类型.而在Action中我们只需

要定义一个封装所有数据信息的javabean

 3.属性和模型驱动的相同点

:当我们使用属性驱动和模型驱动的时候,必须将表单的元素中的name属性值与我们定义接收数据信息的变量

 名对应起来。

 

 

三、如何使用属性驱动?

:对于属性驱动的实现是非常简单的 ,实例如下:

action:

Java代码   收藏代码
  1.     package org.viancent.action;  
  2.         import java.util.Date;  
  3.     import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5.     public class GetFieldAction extends ActionSupport {  
  6.             private String pname;  
  7.             private String address;  
  8.             private int age;  
  9.             private Date date;  
  10.   
  11.             public String getPname() {  
  12.                 return pname;  
  13.             }  
  14.   
  15.             public void setPname(String pname) {  
  16.                 this.pname = pname;  
  17.             }  
  18.   
  19.             public String getAddress() {  
  20.                 return address;  
  21.             }  
  22.                   
  23.                     public void setAddress(String address) {  
  24.                 this.address = address;  
  25.             }  
  26.   
  27.             public int getAge() {  
  28.                 return age;  
  29.             }  
  30.   
  31.             public void setAge(int age) {  
  32.                 this.age = age;  
  33.             }  
  34.   
  35.             public Date getDate() {  
  36.                 return date;  
  37.             }  
  38.   
  39.             public void setDate(Date date) {  
  40.                 this.date = date;  
  41.             }  
  42.                       
  43.             @Override  
  44.             public String execute() throws Exception {  
  45.                 return SUCCESS;  
  46.                       }  
  47. }  

 

Java代码   收藏代码
  1. JSP:(register.jsp)  
  2.     <div>  
  3.     <form action="/struts2/register.action" method="post">  
  4.         <table width="80%" align="center">  
  5.     <tr>  
  6.         <td>UserName:</td>  
  7.         <td><input type="text" name="pname" id="pname"/>       </td>  
  8.     </tr>  
  9.     <tr>  
  10.         <td>PassWord:</td>  
  11.         <td><input type="text" name="address" id="address"/></td>  
  12.     </tr>  
  13.     <tr>  
  14.         <td>Age:</td>  
  15.         <td><input type="text" name="age" id="age"/></td>  
  16.     </tr>  
  17.     <tr>  
  18.         <td>Date</td>  
  19.         <td><input type="text" name="date" id="date"/></td>  
  20.     </tr>  
  21.     <tr>  
  22.         <td colspan="2"><input type="submit" value="submit"/></td>  
  23.     </tr>  
  24.     </table>  
  25. </form>  
  26. </div>  
  27.               
  28. //其他配置信息,相同  

  四、模型驱动

:模型驱动有三点不同

1.所属的Action需要实现ModelDriven接口,并且给定类型和实现接口中的getModel方法

2.需要一个封装所有属性的javabean(对应 1.中的给给定类型)

3.在struts.xml文件中描述此Action的地方让该Action实现一个拦截器 (ModelDrivenInterceptor)

:具体实例如下:

Java代码   收藏代码
  1. JavaBean(person)  
  2. package org.viancent.domain;  
  3. import java.util.Date;  
  4. public class Person {  
  5.         private String pname;  
  6.         private int page;  
  7.         private String address;  
  8.         private Date date;  
  9.   
  10.     public Date getDate() {  
  11.             return date;  
  12.     }  
  13.   
  14.     public void setDate(Date date) {  
  15.             this.date = date;  
  16.     }  
  17.   
  18.     public String getPname() {  
  19.             return pname;  
  20.     }  
  21.   
  22.     public void setPname(String pname) {  
  23.             this.pname = pname;  
  24.     }  
  25.   
  26.     public int getPage() {  
  27.             return page;  
  28.     }  
  29.   
  30.     public void setPage(int page) {  
  31.             this.page = page;  
  32.     }  
  33.   
  34.     public String getAddress() {  
  35.             return address;  
  36.     }  
  37.   
  38.     public void setAddress(String address) {  
  39.             this.address = address;  
  40.     }  
  41. }  

 

Action:(RegisterAction)

Java代码   收藏代码
  1. package org.viancent.action;  
  2. import org.viancent.domain.Person;  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import com.opensymphony.xwork2.ModelDriven;  
  5.   
  6. public class RegisterAction extends ActionSupport implements  
  7. ModelDriven<Person/*这里需要填写Person对象*/> {  
  8.                   
  9.     private Person person =  new Person();   
  10.               //定义Person对象用于承载getModel()方法返回的数据信息  
  11.        //同时这里必须实例化对象,否则person的对象会为空  
  12.                   
  13.     public Person getPerson() {   
  14.                //实现person的getter方法,用于当请求转发后,其他界面数据访问  
  15.             return person;  
  16.     }  
  17.   
  18.     @Override  
  19.     public Person getModel() {  
  20.               //重写ModleDriven的方法,返回定义的person对象  
  21.             return person;  
  22.     }  
  23.   
  24.     @Override  
  25.     public String execute() throws Exception {   
  26.               //实现跳转            
  27.              System.out.println(person.getPage()+""+person.getDate());  
  28.                  return SUCCESS;  
  29.         }  
  30. }  

 struts.xml:

Java代码   收藏代码
  1. <action name="register"class="org.viancent.action.RegisterAction">  
  2.     <result name="success">/result.jsp</result>  
  3.         <result name="input">/show.jsp</result>  
  4.         <interceptor-ref name="modelDriven"></interceptor-ref>  
  5.                  //实现模型驱动的拦截器  
  6.         <interceptor-ref name="defaultStack"></interceptor-ref>  
  7. </action>  

 JSP(register.jsp)

如上:属性驱动的JSP界面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值