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詳解之四:在驅動程式中初始化並註冊widget和route
前幾篇文章我們從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