1. 程式人生 > >Struts2-屬性驅動與模型驅動

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屬性值與我們定義接收資料資訊的變數

 名對應起來。

三、如何使用屬性驅動?

:對於屬性驅動的實現是非常簡單的 ,例項如下:

action:

Java程式碼  收藏程式碼
  1. package org.viancent.action;  
  2.         import java.util.Date;  
  3.     import com.opensymphony.xwork2.ActionSupport;  
  4.     publicclass GetFieldAction extends ActionSupport {  
  5.             private String pname;  
  6.             private String address;  
  7.             private
    int age;  
  8.             private Date date;  
  9.             public String getPname() {  
  10.                 return pname;  
  11.             }  
  12.             publicvoid setPname(String pname) {  
  13.                 this.pname = pname;  
  14.             }  
  15.             public String getAddress() {  
  16.                 return address;  
  17.             }  
  18.                     publicvoid setAddress(String address) {  
  19.                 this.address = address;  
  20.             }  
  21.             publicint getAge() {  
  22.                 return age;  
  23.             }  
  24.             publicvoid setAge(int age) {  
  25.                 this.age = age;  
  26.             }  
  27.             public Date getDate() {  
  28.                 return date;  
  29.             }  
  30.             publicvoid setDate(Date date) {  
  31.                 this.date = date;  
  32.             }  
  33.             @Override
  34.             public String execute() throws Exception {  
  35.                 return SUCCESS;  
  36.                       }  
  37. }  
Java程式碼  收藏程式碼
  1. JSP:(register.jsp)  
  2.     <div>  
  3.     <form action="/struts2/register.action" method="post">  
  4.         <table width="80%" align="center">  
  5.     <tr>  
  6.         <td>UserName:</td>  
  7.         <td><input type="text" name="pname" id="pname"/>       </td>  
  8.     </tr>  
  9.     <tr>  
  10.         <td>PassWord:</td>  
  11.         <td><input type="text" name="address" id="address"/></td>  
  12.     </tr>  
  13.     <tr>  
  14.         <td>Age:</td>  
  15.         <td><input type="text" name="age" id="age"/></td>  
  16.     </tr>  
  17.     <tr>  
  18.         <td>Date</td>  
  19.         <td><input type="text" name="date" id="date"/></td>  
  20.     </tr>  
  21.     <tr>  
  22.         <td colspan="2"><input type="submit" value="submit"/></td>  
  23.     </tr>  
  24.     </table>  
  25. </form>  
  26. </div>  
  27. //其他配置資訊,相同

 四、模型驅動

:模型驅動有三點不同

1.所屬的Action需要實現ModelDriven介面,並且給定型別和實現介面中的getModel方法

2.需要一個封裝所有屬性的javabean(對應 1.中的給給定型別)

3.在struts.xml檔案中描述此Action的地方讓該Action實現一個攔截器 (ModelDrivenInterceptor)

:具體例項如下:

Java程式碼  收藏程式碼
  1. JavaBean(person)  
  2. package org.viancent.domain;  
  3. import java.util.Date;  
  4. publicclass Person {  
  5.         private String pname;  
  6.         privateint page;  
  7.         private String address;  
  8.         private Date date;  
  9.     public Date getDate() {  
  10.             return date;  
  11.     }  
  12.     publicvoid setDate(Date date) {  
  13.             this.date = date;  
  14.     }  
  15.     public String getPname() {  
  16.             return pname;  
  17.     }  
  18.     publicvoid setPname(String pname) {  
  19.             this.pname = pname;  
  20.     }  
  21.     publicint getPage() {  
  22.             return page;  
  23.     }  
  24.     publicvoid setPage(int page) {  
  25.             this.page = page;  
  26.     }  
  27.     public String getAddress() {  
  28.             return address;  
  29.     }  
  30.     publicvoid setAddress(String address) {  
  31.             this.address = address;  
  32.     }  
  33. }  

Action:(RegisterAction)

Java程式碼  收藏程式碼
  1. package org.viancent.action;  
  2. import org.viancent.domain.Person;  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import com.opensymphony.xwork2.ModelDriven;  
  5. publicclass RegisterAction extends ActionSupport implements
  6. ModelDriven<Person/*這裡需要填寫Person物件*/> {  
  7.     private Person person =  new Person();   
  8.               //定義Person物件用於承載getModel()方法返回的資料資訊
  9.        //同時這裡必須例項化物件,否則person的物件會為空
  10.     public Person getPerson() {   
  11.                //實現person的getter方法,用於當請求轉發後,其他介面資料訪問
  12.             return person;  
  13.     }  
  14.     @Override
  15.     public Person getModel() {  
  16.               //重寫ModleDriven的方法,返回定義的person物件
  17.             return person;  
  18.     }  
  19.     @Override
  20.     public String execute() throws Exception {   
  21.               //實現跳轉          
  22.              System.out.println(person.getPage()+""+person.getDate());  
  23.                  return SUCCESS;  
  24.         }  
  25. }  

 struts.xml:

Java程式碼  收藏程式碼
  1. <action name="register"class="org.viancent.action.RegisterAction">  
  2.     <result name="success">/result.jsp</result>  
  3.         <result name="input">/show.jsp</result>  
  4.         <interceptor-ref name="modelDriven"></interceptor-ref>  
  5.                  //實現模型驅動的攔截器
  6.         <interceptor-ref name="defaultStack"></interceptor-ref>  
  7. </action>  

 JSP(register.jsp)

如上:屬性驅動的JSP介面

相關推薦

Struts2-屬性驅動模型驅動

 Struts2 - 屬性驅動與模型驅動 一、為什麼要使用屬性驅動和模型驅動?          :struts2與struts很大的不同點在於,struts的execute方法提供了HttpServletRequest和       HttpServletResp

Struts2屬性驅動模型驅動

1屬性驅動是指用Action的屬性來封裝來回請求的引數. 2.模型驅動     模型驅動是指使用JavaBean來封裝來回請求的引數.(個人理解) 建議使用模型驅動,因為相比struts 1的Action類,struts 2的Action類承擔了太多的責任:既用於封裝來回請

屬性驅動模型驅動 中應該注意的問題。

Struts2 - 屬性驅動與模型驅動 中應該注意的問題: 屬性驅動例子程式碼如下: import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{p

屬性驅動模型驅動概念

Struts2 - 屬性驅動與模型驅動 一、為什麼要使用屬性驅動和模型驅動?          :struts2與struts很大的不同點在於,struts的execute方法提供了HttpServletRequest和       HttpServletResp

屬性驅動模型驅動的比較

a)      屬性驅動靈活、準確;模型驅動不靈活,因為很多時候,頁面所提交過來的引數並不屬於模型中的屬性. 也就是說頁面所提交過來的引數,與模型中的屬性 並不一致,這是很常見的情況。 b)      模型驅動更加符合面向物件的程式設計風格,使得我們獲得的是物件而不是一個個

讓JSON請求和引數請求一樣,可以通過Struts2模型驅動給Action的類成員變數賦值(欄位驅動模型驅動

自己定義一個攔截器: import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.

struts2屬性驅動模型驅動

.Struts2的屬性驅動. Struts2的屬性驅動指的是在action中JSP頁面的每一個form中的name都對應在action中有一個屬性與之對應。   Struts2的模型驅動 Struts2的模型驅動其實和Struts1.x中的ActionForm有點類似,

struts2 接受引數的兩種方式(屬性驅動模型驅動)

定義: 在struts2中,頁面的資料和action(控制層)傳輸基本上有兩種方式,一個是屬性驅動、另一個是模型驅動。 屬性驅動 基本資料型別的屬性對應: 就是Web頁面上html標籤

Struts2屬性驅動模型驅動詳解

    屬性驅動,就是在Action中定義的是和表單中對應的一個個屬性,每個屬性都有對應的get/set方法。當表單提 交到Action後,Struts2將會自動將根據表單的name屬性呼叫Acti

淺談Struts2屬性驅動模型驅動

一直在用Struts2實現MVC,因為相比於Struts1中大量使用request.getparameter在頁面上獲取值,struts2則提供了屬性驅動和模型驅動處理了這一問題。通過這兩個驅動,我們

屬性驅動 and 模型驅動

參數 ces over upd 實例 str ring new div //1.創建一個UserBean public class User { private String username; private String pwd; publi

屬性驅動模型驅動的簡單了解

一個 getpara java col bsp set get 宋體 定義 1)屬性驅動:就是jsp表單中的name都和action當中的一一屬性對應,這樣在action當中就不用像servlet一樣去通過String username=request.getParamet

第06講 struts2的設定資料-模型驅動

1,在 HeadFirstStruts2chapter02 中,新建類UserAction3,實現ModelDriven。ModelDriven的缺點是隻能載入一個bean。 import com.cruise.model.User; import com.cruise.service.UserSe

屬性驅動模型驅動 [問]

family 訪問 mode get model 繼承 action 只需要 必須 屬性驅動不需要繼承或實現;模型驅動需要實現ModelDriven接口 屬性驅動需要為成員字段提供get/set訪問器;模型驅動只需要提供get訪問器 屬性驅動下,Action中的屬性不需要

struts學習(四)—屬性封裝、模型驅動封裝和表示式封裝

本文學習內容來自傳智部落格struts教程。 1.屬性封裝 作用: 直接把表單提交屬性封裝到action的屬性裡面 步驟: (1)在action中宣告成員變數,變數名稱和表單輸入項的名稱一樣 (2)生成變數的set方法。 缺

屬性驅動模型驅動

屬性驅動 在action中宣告一些屬性,這些屬效能獲取到表單中的值。 步驟: 1、在action中宣告一些屬性,這些屬性和表單中的name屬性名字一樣。 2、這些屬性必須有setter和getter方法。 下面看程式碼: Action: public class Prope

屬性驅動,域屬性驅動模型驅動

屬性驅動在Struts2中,可以直接在Action中定義各種Java基本資料型別的欄位,使這些欄位與表單資料相對應,並利用這些欄位進行資料傳遞,如下面程式碼所示:域驅動在屬性驅動方式中,如果要傳入的資料很多的話,那麼Action的屬性也會變得很多。再加上屬性有對應的gette

資料驅動關鍵字驅動

資料驅動:資料驅動從資料檔案讀取輸入資料,通過變數的引數化將測試資料傳入測試指令碼,不同的資料檔案對應不同的測試用例,資料和指令碼分離。資料來控制測試的業務流。 比如你測一個WEB程式,有很多頁面,你可

訊息驅動事件驅動比較

簡單記錄自己對於 訊息驅動 和 事件驅動的理解。 關於這二者的具體區別,於實現上來說,二者都是 註冊繫結,然後交付執行。 訊息驅動模型在註冊的時候僅僅註冊一個回撥函式作為處理函式。 而事件驅動模型則需要註冊多個函式作為處理函式。 訊息驅動模型由於處理函式

架構視角 - DDD、TDD、MDD領域驅動、測試驅動還是模型驅動

提出問題     「領域驅動設計」之於微服務,好比麥當勞之於漢堡(個人更喜歡肯德基,漢堡要大些,麥當勞的漢堡,想吃頓飽飯,請先給我上6個