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:

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界面

时间: 2024-12-22 04:42:02

Struts2的属性驱动与模型驱动的区别的相关文章

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(四)属性驱动和模型驱动

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

Struts2属性驱动与模型驱动

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

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

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

strus2中获取表单数据 两种方式 属性驱动 和模型驱动

strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值* 如果一个属性在对象栈,在页面上可以根据name属性进行回显*/ /** * 属性驱动实现的条件:* 1.当前请求的action在栈顶,所以action中的属性就暴漏出来了* 2.获取页面上表单的元素,整合成一个map * 3.调用setValue方法赋值*/ 1 package cn.itcast.struts2.sh; 2 3

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 中属性驱动(其实就是struts2 action 中处理 request 的参数【old 方式servlet api 封装数据到javabean中(or beanutils)】),这里属性驱动是新方式

1.属性驱动 a\  一般的set 1 public class UserAction extends ActionSupport { 2 3 private String username; 4 private String password; 5 6 public void setUsername(String username) { 7 this.username = username; 8 } 9 10 public void setPassword(String password) {

属性驱动 and 模型驱动

//1.创建一个UserBean public class User { private String username; private String pwd; public String getUsername() { return username; } public void setUsername(String username) { this.username = user name; } public String getPwd() { return pwd; } public v

属性驱动和模型驱动的简单了解

1)属性驱动:就是jsp表单中的name都和action当中的一一属性对应,这样在action当中就不用像servlet一样去通过String username=request.getParameter("name");去获取到表单中的信息,而是由struts自动去调用get方法,为属性注入值,这就是属性驱动. 2)模型驱动:就是把jsp里面的数据先封装到一个javabean中,然后再在action中去调用这个javabean去得到数据. 模型驱动的条件: (1)模型驱动的Action