1. 程式人生 > >Struts2屬性驅動和模型驅動詳解

Struts2屬性驅動和模型驅動詳解

    屬性驅動,就是在Action中定義的是和表單中對應的一個個屬性,每個屬性都有對應的get/set方法。當表單提

交到Action後,Struts2將會自動將根據表單的name屬性呼叫Action中相應的屬性setter,去自動賦值。

    模型驅動,就是事先定義一個模型即Model,將表單傳遞過來的資料封裝成一個Model物件後,再傳遞給Action。

當表單提交到Action後,Action就會去自動呼叫Model的setter,將表單中的屬性的值賦給私有物件的屬性。

對兩者有了巨集觀瞭解之後,我們結合下面的例項來切實體驗一下在用法上的異同。首先,定義一個javaBean。

<span style="font-family:SimSun;font-size:18px;">/**
 * 使用者角色類
 * @author WYQ
 *
 */
public class Role {

	//角色id
	public Long id;
	//角色名稱
	public String name;
	//角色說明
	public String description;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}		
}</span></span>

首先,我們看一下屬性驅動的用法。JSP頁面中用到了兩個變數name和description。

<span style="font-family:SimSun;font-size:18px;">
<!--顯示資料列表-->
   <tbody id="TableData" class="dataContainer" datakey="roleList">
	<s:iterator value="#roleList">
            <tr class="TableDetail1 template">		
		<td><s:property value=%{name}/></td>
		<td><s:property value=%{description}/></td>
		<td><s:a action="role_delete?id=%{id}" >刪除</s:a>
		    <s:a action="role_editUI?id=%{id}">修改</s:a>
		</td>
	    </tr>
	</s:iterator>
   </tbody></span>


接下來
是RoleAction。屬性驅動下RoleAction中需要對name和description分別進行定義。
<span style="font-family:SimSun;font-size:18px;">public class RoleAction extends ActionSupport {

	@Resource
	private RoleService roleService;
	//角色id
	private Long id;
	//角色說明
	private String description;
	//角色名稱
	private String name;
	
	/*新增*/
	public String add() throws Exception{
		//封裝到物件中
		Role role=new Role();
		role.setName(name);
		role.setDescription(description);
		//儲存到資料庫中
		roleService.save(role);
		//返回列表頁面
		return "toList";
	}
	/*------------getter and setter----------*/
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}
} 
</span>

    我們可以看到,由於JSP頁面的每一個name在action中都要有一個屬性與之一一對應,因而隨著屬性數量的增加在

Action中會出現很多的getter和setter方法。增加了程式碼量,而且不利於程式碼維護。

接下來看一下模型驅動。模型驅動下的Action需要滿足以下三點:

    (1)模型驅動的Action必須實現ModelDriven介面。

    (2)必須實現ModelDriven介面中唯一的方法getModel,返回泛型的一個物件。

    (3)在Action中定義一個封裝所有資料資訊的javabean私有物件並提供相應的getter與setter。

下面是模型驅動下的實現。首先,JSP頁面操作的不再是獨立的變數屬性。

<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;"><!--顯示資料列表-->
 <tbody id="TableData" class="dataContainer" datakey="roleList">
      <s:iterator value="#roleList">
	<tr class="TableDetail1 template">		
	    <td><s:property value=%{<span style="color:#FF0000;">role.name</span>}/>   </td>
	    <td><s:property value=%{<span style="color:#FF0000;">role.description</span>}/></td>
	    <td><s:a action="role_delete?id=%{id}" >刪除</s:a>
		<s:a action="role_editUI?id=%{id}">修改</s:a>
	    </td>
	</tr>
     </s:iterator>
 </tbody></span></span>

模型驅動下的Action實現。

<span style="font-family:SimSun;font-size:18px;">public class RoleAction extends ActionSupport <span style="color:#FF0000;">implements ModelDriven<Role></span> {

	@Resource
	private RoleService roleService;

	<span style="color:#FF0000;"><span style="background-color: rgb(255, 255, 255);">private Role role;</span></span>

	// 實現ModelDriven的方法返回泛型物件
	public Role <span style="color:#FF0000;">getModel</span>() {
		return role;
	}

	/* 新增 */
	public String add() throws Exception {
		// 儲存到資料庫中
		roleService.save(role);
		// 返回列表頁面
		return "toList";
	}

	/*------------getter and setter----------*/

	public Role getRole() {
		return role;
	}

	public void setRole(Role role) {
		this.role = role;
	}
}
</span>

  這樣,無論我們再擴充多少個屬性,由於操作的是物件,都不需要新增Action實現。大大提高了開發和可維護性。


   通過程式碼實現,我們可以得出屬性驅動在JSP和Action之間傳遞的是一個個單獨的屬性,而模型驅動在JSP和

Action之間傳遞的是一個封裝好的物件,更接近面向物件程式設計,減少了程式碼量、提高可維護性、可複用性等等。

相關推薦

Struts2屬性驅動模型驅動

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

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

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

struts2屬性驅動模型驅動

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

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

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

淺談Struts2屬性驅動模型驅動

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

屬性驅動模型驅動 [問]

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

屬性驅動模型驅動

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

Struts2屬性驅動原理模型驅動原理

屬性驅動:(靠的是ParameterInterceptor攔截器,setValue方法操作值桟屬性) *  在action中設定屬性,屬性的名稱和頁面上表單中的name屬性的名稱保持一致 *  在ac

day32Struts2Day02(屬性模型驅動獲取資料 攔截器定義配置使用 攔截未登入使用者)

回顧 1、Struts2框架的概述,前端控制器的模式,核心的過濾器 2、入門 編寫 struts.xml配置檔案 3、配置檔案 配置檔案的載入 4、Action類的編寫和訪問 在Struts2框架中使用Servlet的API 1、在Action類中也可以獲取到Servlet一些常用的API

ALSA音效卡驅動中的DAPM之二:widget-具備路徑電源管理資訊的kcontrol

上一篇文章中,我們介紹了音訊驅動中對基本控制單元的封裝:kcontrol。利用kcontrol,我們可以完成對音訊系統中的mixer,mux,音量控制,音效控制,以及各種開關量的控制,通過對各種kcontrol的控制,使得音訊硬體能夠按照我們預想的結果進行工作。同時我

Struts2-屬性驅動模型驅動

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

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

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

事件驅動模型例項(Java篇)

這個按鈕的時候,按鈕物件會直接把這次點選感覺傳遞給ButtonEventHandler的actionPerformed方法處理,為養成較好的程式設計習慣,我們中心並不建議學員直接在該委託方法中編寫程式碼,而是需要將該事件處理再次轉發給窗體中的某個方法來處理,這個方法的命名也必須是有規則的,就是事件源名+下劃線

Struts2屬性驅動模型驅動

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

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

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

ALSA音效卡驅動中的DAPM之四:在驅動程式中初始化並註冊widgetroute

前幾篇文章我們從dapm的資料結構入手,瞭解了代表音訊控制元件的widget,代表連線路徑的route以及用於連線兩個widget的path。之前都是一些概念的講解以及對資料結構中各個欄位的說明,從本章開始,我們要從程式碼入手,分析dapm的詳細工作原理: 如何註冊widg

STM32-24位AD7799驅動之手冊程式碼,支援模擬SPI硬體SPI

1.AD7799介紹 AD7799結構圖如下所示:   其中REFIN參考電壓建議為2.5V, REFIN電壓低於0.1V時,則差分輸入ad值就無法檢測了,如下圖所示:   注意: 如果REG_CONFIG的REF_DET開啟的話,那麼輸入AD值電壓低於0.5V時,則差分輸入a

屬性驅動 and 模型驅動

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

Spring 框架中註釋驅動的事件監聽器

publisher 情況下 對象 nal bool class 事件類型 drive super 事件交互已經成為很多應用程序不可或缺的一部分,Spring框架提供了一個完整的基礎設施來處理瞬時事件。下面我們來看看Spring 4.2框架中基於註釋驅動的事件監聽器。 1

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

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