您的位置:首页 > 编程语言 > Java开发

Struts2 - 属性驱动与模型驱动

2016-04-20 16:25 519 查看


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

: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代码


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;

}

}

Java代码


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)

:具体实例如下:

Java代码


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)

Java代码


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:

Java代码


<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界面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: