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属性值与我们定义接收数据信息的变量
名对应起来。
三、如何使用属性驱动?
:对于属性驱动的实现是非常简单的 ,实例如下
java代码

package cn.actionctr;


import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;

public class OneAction 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";//这里我默认返回success
}
}



index.jsp
<body>

<div>
<form action="one" 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="password" name="address" id="address"/></td>
</tr>
<tr>
<td>Age:</td>
<td><input type="text" name="age" id="age"/></td>
</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>


</body>


jsp代码show.jsp
<body>
<!--此处简单显示 -->

用户名:${pname}<br>

</body>


配置Struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="my-packag" extends="struts-default" namespace="/">
<!-- 指定自己的类 -->
<action name="one" class="cn.actionctr.OneAction">
<!-- 如果返回success字符串,就转发到show.jsp -->
<result>/jsps/show.jsp</result>
</action>
</package>

</struts>


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Strusts</display-name>


<filter>
<filter-name>s2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>s2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>
</web-app>


四、模型驱动
:模型驱动有三点不同
1.所属的Action需要实现ModelDriven接口,并且给定类型和实现接口中的getModel方法
2.需要一个封装所有属性的javabean(对应 1.中的给给定类型)
3.在struts.xml文件中描述此Action的地方让该Action实现一个拦截器 (ModelDrivenInterceptor)
:具体实例如下:
package cn.actionctr;

import cn.domain.Person;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class OneAction 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
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="my-packag" extends="struts-default" namespace="/">
<!-- 指定自己的类 -->
<action name="one" class="cn.actionctr.OneAction">
<!-- 如果返回success字符串,就转发到show.jsp -->
<result>/jsps/show.jsp</result>
<interceptor-ref name="modelDriven"></interceptor-ref>

<interceptor-ref name="defaultStack"></interceptor-ref>
</action>

</package>

</struts>


package cn.domain;


import java.util.Date;
public class Person {
private String pname;
private int page;
private String address;




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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值