Struts2 - 屬性驅動與模型驅動java
1、爲何要使用屬性驅動和模型驅動?dom
:struts2與struts很大的不一樣點在於,struts的execute方法提供了HttpServletRequest和 jsp
HttpServletResponse方法在獲取客戶端提交的數據信息的時候須要使用HttpServletRequest的ide
getParameter()方法,而且還須要進行必要的數據類型轉換。如何客戶端提交的數據量大的時候,咱們則post
須要寫不少的getParameter方法。這樣代碼量就相應的增長很多。可是struts2爲咱們提供了屬性驅動和模this
型驅動,它不須要咱們寫不少的獲取值的方法。而只須要咱們在Action中定義相應的getter方法,在界面上以spa
Action中的變量名做爲表單元素的name屬性值便可。orm
2、屬性驅動和模型驅動有什麼異同?xml
1.屬性驅動對象
:對於屬性驅動,咱們須要在Action中定義與表單元素對應的全部的屬性,於是在Action中會出現不少的
getter和setter方法
2.模型驅動
:對於模型驅動,使用的Action對象須要實現ModelDriven接口並給定所須要的類型.而在Action中咱們只需
要定義一個封裝全部數據信息的javabean
3.屬性和模型驅動的相同點
:當咱們使用屬性驅動和模型驅動的時候,必須將表單的元素中的name屬性值與咱們定義接收數據信息的變量
名對應起來。
3、如何使用屬性驅動?
:對於屬性驅動的實現是很是簡單的 ,實例以下:
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>
//其餘配置信息,相同
4、模型驅動:模型驅動有三點不一樣
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>