文档章节

Struts2 - 属性驱动与模型驱动

唐小唐
 唐小唐
发布于 2015/04/17 20:54
字数 950
阅读 33
收藏 2

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)


本文转载自:http://perfectplan.iteye.com/blog/1561792

唐小唐
粉丝 2
博文 24
码字总数 20125
作品 0
荆州
程序员
私信 提问
day26-struts2---day01(struts2基础,xml校验,属性驱动,模型驱动,域)

struts2基础: struts.xml 自动提示: struts2访问以及属性驱动: struts2的属性驱动2和模型驱动: struts2域的访问,以及action,jsp之间的请求转发,请求重定向:...

萧小蚁
2016/04/06
36
0
Struts2 - 属性驱动与模型驱动

Struts2 - 属性驱动与模型驱动 一、为什么要使用属性驱动和模型驱动? :struts2与struts很大的不同点在于,struts的execute方法提供了HttpServletRequest和 HttpServletResponse方法在获取客...

西行侠客
2014/04/15
412
0
Struts2的学习笔记(3)

很久没发表了,不代表我没在学习struts2啊,对吧?好,下面还是把我的一些笔记供出来给大家参考指正吧? 1、Struts2应用的分层体系架构: 2、Struts2的模型驱动(Model Driven),之前所学的...

larch
2012/04/13
220
0
Java程序员从笨鸟到菜鸟之(四十三)细谈struts2(六)获取servletAPI和封装表单数据

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 一:获取servletAPI的三种方法 在传统的Web开发中,经常会用到Servlet API中的HttpServletRequest、HttpSes...

长平狐
2012/11/12
204
0
struts2之ModelDriven

可以根据Action属性的不同将它分为两类:Field-Driven(属性驱动) Action和Model-Driven(模型驱动) Action。 一、Field-Driven(属性驱动)Action,Action拥有自己的属性,这些属性一般是...

iTeacher
2012/07/02
157
0

没有更多内容

加载失败,请刷新页面

加载更多

Cantata 8.0有哪些新变化

Cantata 8.0 于2018年5月发布,这一重大版本的升级在以往技术的基础上增添了关键性新功能,并且对用户界面进行了全面改进,这个文档简要介绍了8.0中的主要变化。 Cantata 于2018年5月发布,本...

旋极科技
15分钟前
6
0
在线客服系统企业用的如何?

现在很多企业都在使用在线客服系统,但是销售订单没有显著增加这是为什么呢? 一:我们企业的客服人员是否有做好真正的接待工作? 是否每天都有对网站上的访客进行接待? 相关管理人员有没有做...

唯喏
24分钟前
4
0
Hystrix实现主线程和子线程的ThreadLocal上下文传递

问题描述 我在使用日志链路追踪的时候(基于SLF4J MDC机制实现日志的链路追踪),我发现使用Hystrix线程池隔离的时候,我不能将子线程没有复制主线程的MDC上下文(Slf4j MDC机制 ),导致日志链...

xiaolyuh
30分钟前
4
0
基于CentOS7搭建GitLab

基于CentOS7搭建GitLab 12018.11.02 16:38:51字数 959阅读 3790 本文作者:蓝雄威,叩丁狼高级讲师。原创文章,转载请注明出处。 一、简介 Git Lab GitLab是利用 Ruby on Rails 一个开源的版...

linjin200
31分钟前
2
0
AJAX技术

1.1 准备工作 因为AJAX也需要请求服务器,异步请求也是请求服务器,所以我们需要先写好服务器端代码,即编写一个Servlet! 这里,Servlet很简单,只需要输出“Hello AJAX!”。 public class...

Pak_key
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部