一、為什麼要使用屬性驅動和模型驅動?
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:
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)
struts.xml:
JSP(register.jsp)