struts2进阶【3】——模型驱动与属性驱动

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

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:

package org.viancent.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;  

public class GetFieldAction extends ActionSupport {
        private String pname;
        private String address;
        private int age;
        private Date date;  

        public String getPname() {
            return pname;
        }  

        public void setPname(String pname) {
            this.pname = pname;
        }  

        public String getAddress() {
            return address;
        }  

                public void setAddress(String address) {
            this.address = address;
        }  

        public int getAge() {
            return age;
        }  

        public void setAge(int age) {
            this.age = age;
        }  

        public Date getDate() {
            return date;
        }  

        public void setDate(Date date) {
            this.date = date;
        }  

        @Override
        public String execute() throws Exception {
            return SUCCESS;
                     }
}

JSP:(register.jsp)

   <div>
   <form action="/struts2/register.action" method="post">
       <table width="80%" align="center">
   <tr>
       <td>UserName:</td>
       <td><input type="text" name="pname" id="pname"/>       </td>
   </tr>
   <tr>
       <td>PassWord:</td>
       <td><input type="text" name="address" id="address"/></td>
   </tr>
   <tr>
       <td>Age:</td>
       <td><input type="text" name="age" id="age"/></td>
   </tr>
   <tr>
       <td>Date</td>
       <td><input type="text" name="date" id="date"/></td>
   </tr>
   <tr>
       <td colspan="2"><input type="submit" value="submit"/></td>
   </tr>
   </table>
</form>
</div>  

//其他配置信息,相同

四、模型驱动

模型驱动有三点不同

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

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

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

具体实例如下:

JavaBean(person)

package org.viancent.domain;
import java.util.Date;
public class Person {
       private String pname;
       private int page;
       private String address;
       private Date date;  

   public Date getDate() {
           return date;
   }  

   public void setDate(Date date) {
           this.date = date;
   }  

   public String getPname() {
           return pname;
   }  

   public void setPname(String pname) {
           this.pname = pname;
   }  

   public int getPage() {
           return page;
   }  

   public void setPage(int page) {
           this.page = page;
   }  

   public String getAddress() {
           return address;
   }  

   public void setAddress(String address) {
           this.address = address;
   }
}  

Action:(RegisterAction)

package org.viancent.action;
import org.viancent.domain.Person;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;  

public class RegisterAction extends ActionSupport implements
ModelDriven<Person/*这里需要填写Person对象*/> {  

   private Person person =  new Person();
             //定义Person对象用于承载getModel()方法返回的数据信息
      //同时这里必须实例化对象,否则person的对象会为空  

   public Person getPerson() {
              //实现person的getter方法,用于当请求转发后,其他界面数据访问
           return person;
   }  

   @Override
   public Person getModel() {
             //重写ModleDriven的方法,返回定义的person对象
           return person;
   }  

   @Override
   public String execute() throws Exception {
             //实现跳转
            System.out.println(person.getPage()+""+person.getDate());
                return SUCCESS;
       }
}  

struts.xml:

<action name="register"class="org.viancent.action.RegisterAction">
   <result name="success">/result.jsp</result>
       <result name="input">/show.jsp</result>
       <interceptor-ref name="modelDriven"></interceptor-ref>
                //实现模型驱动的拦截器
       <interceptor-ref name="defaultStack"></interceptor-ref>
</action>  

JSP(register.jsp)

如上:属性驱动的JSP界面

五、总结

1.属性驱动灵活,准确;模型驱动不灵活,因为很多时候,页面提交过来的参数并不属于模型中的属性,也就是说页面所提交过来的参数与模型中的属性并不一致,这是很常见的情况。

2.模型驱动更加符合面向对象的编程风格,使得我们获得是对象而不是一个一个的离散的值。

小结:推荐使用属性驱动编写Action。

时间: 2024-07-30 20:31:54

struts2进阶【3】——模型驱动与属性驱动的相关文章

Struts2(二)— Result结果配置、Servlet的API的访问、模型驱动、属性驱动

一.Result结果配置 1.全局和局部结果 ? 平常我们设置跳转页面,是在action标签里面加上 result标签来控制,这种设置的页面跳转,称之为局部结果页面但是我们有时候在很多个action里面,针对不同的结果进行跳转时,也有可能跳转同一个页面,那么这个时候就可以配置全局结果页面. 1.1局部结果 在action里面写上的result跳转的页面,称之为局部结果页面配置 <action name="demo01_*" class="com.pri.web.acti

(九)模型驱动和属性驱动

出于结构清晰的考虑,应该采用单独的Model实例来封装请求参数和处理结果,这就是所谓的模型驱动, 所谓模型驱动,就是使用单独的JavaBean来贯穿整个MVC流程. 所谓属性驱动,就是使用属性来作为贯穿MVC流程的信息携带者,当然属性必须依附于对象, 这个对象就是Action实例. 简单说,模型驱动就是使用单独的javaBean封装请求参数. 属性驱动就是把属性写在Action类中. 我们发现上一章的jsp中的name必须前面得加 user.username..太过麻烦.我们使用模型驱动来解决这

模型驱动与属性驱动区别

POJO(Plain Old Java Objects)简单的Java对象,实际就是普通JavaBeans,是为避免和EJB混淆所创造的简称 Property-Driven示例 标签name名与Action和POJO中名称保持一致即可 ①.JSP <s:form action="login.action" method="post" theme="simple"> <input type="text" nam

Struts2的属性驱动与模型驱动的区别

一.为什么要使用属性驱动和模型驱动? struts2与struts很大的不同点在于,struts的execute方法提供了HttpServletRequest和 HttpServletResponse方法在获取客户端提交的数据信息的时候需要使用HttpServletRequest.getParameter()方法,并且还需要进行必要的数据类型转换.如何客户端提交的数据量大的时候,我们则需要写很多的getParameter方法.这样代码量就相应的增加不少.但是struts2为我们提供了属性驱动和模

Struts2属性驱动与模型驱动

原文地址:http://blog.csdn.net/wuwenxiang91322/article/details/11660207 为什么要使用属性驱动和模型驱动 struts2与struts很大的不同点在于,struts的execute方法提供了HttpServletRequest和HttpServletResponse方法在获取客户端提交的数据信息的时候需要使用HttpServletRequest的getParameter()方法,并且还需要进行必要的数据类型转换.如何客户端提交的数据量大

Struts2(四)属性驱动和模型驱动

一.概述 所谓模型驱动,就是使用单独的JavaBean实例贯穿整个MVC流程,与之相对应的属性驱动方式,则使用属性作为贯穿MVC流程的信息携带者.属性无法独立存下,它必须依附于一个对象,这个对象就是Action实例.简单来说,模型驱动使用单独的值对象来封装请求参数和处理结果,属性驱动则使用Action实例来封装请求参数和处理结果. 二.应用实例 以前文提到的LoginAction为例,在属性驱动中的action为: public class LoginAction extends ActionS

Struts2 属性驱动、模型驱动、异常机制

模型驱动使用单独的VO(值对象)来封装请求参数和处理结果,属性驱动则使用Action实例来封装请求参数和处理结果. 一.使用模型驱动 1.login.action采用模型驱动模式实现,采用模型驱动时必须提供对应的模型,该模型就是一个普通的javabean. UserBean.java 1: package cc.openhome; 2: public class UserBean { 3: private String username; 4: private String password;

Struts2中属性驱动与模型驱动

属性驱动: LoginAction.java: public class LoginAction extends ActionSupport implements ModelDriven<User>{ private User mdoel = new User(); @Override public User getModel() { // TODO Auto-generated method stub return this.mdoel; } public String login(){ S

struts2中的属性驱动和模型驱动

1.Struts2的属性驱动. Struts2的属性驱动指的是在action中JSP页面的每一个form中的name都对应在action中有一个属性与之对应.看下面代码片段: <form action="register.do" name="RegisterForm" method="post"> Username:<input type="text" name="uname">&l