為actin mpping之attribute屬性正身! (轉)
翻看一些資料。。。。。
在《Programming Jakarta 》這本書中的第四章“Configuring the Struts Application”中這樣一段說明來分別闡述這兩
個屬性:(102頁)
++++++++
atribute:
++++++++
The name of the request or session pe attribute under which the fobean for this action can be accessed.
A value is only allowed here if there is a form bean specified in the name attribute. This attribute is
optional and has no default value.
++++++++
name:
++++++++
The name of the form bean, if any, that is associated with this action. This value must be the name attribute
from one of the form-bean elements defined earlier. This attribute is optional and has no default value.
最初看這些真的還是不好區分這兩者。 不過在仔細看過struts的以後,豁然開朗。。。
下面主要對attribute進行解釋,應為沒有人會對name屬性不瞭解的(呵呵。。。)
解釋:在struts例項化actionform的時候,有兩種情況:如果已經存在,那麼從中取回;如果第一次例項化,那麼建立,並放入記憶體。
這樣就有一個問題了,struts是根據什麼來取回並建立actionform的呢,答案就是attribute的值。讓我們進入struts的原始碼:
/**
*建立或者取回formbean方法
*該方法在:org..struts.util.RequestUtils中
*/
public static Actionform createActionform(
HttpRequest request,
ActionMapping mapping,
ModuleConfig moduleConfig,
ActionServlet servlet) {
。。。。
。。。
// Is there a form bean associated with this mapping?
//得到action mapping中attribute的值
String attribute = mapping.getAttribute();
。。。。
。。。。
Actionform instance = null;
HttpSession session = null;
//yes!!就在這裡了,把建立以後的actionform放在request或者session裡,看到放入的名字了麼,就是mapping.getAttribute();
if ("request".equals(mapping.getScope())) {
instance = (Actionform) request.getAttribute(attribute);
} else {
session = request.getSession();
instance = (Actionform) session.getAttribute(attribute);
}
。。。
。。。
}
下面又有一個問題浮出水面:如果我沒有在action mapping中指定attribute呢,那struts 是如何解決的?
答案很簡單,如果單從結果上看,此時struts使用的name的值,為什麼呢,看struts原始碼:
/**
* The request-scope or session-scope attribute name under which our
* form bean is accessed, if it is different from the form bean's
* specified name
.
*該程式碼在:org.apache.struts.config.ActionConfig中
*/
protected String attribute = null;
public String getAttribute() {
//yes!!!!就在這裡,看到了吧,如果你沒有設定attribute,那麼struts 會把name的值拿過來用。呵呵。。。
if (this.attribute == null) {
return (this.name);
} else {
return (this.attribute);
}
}
public void setAttribute(String attribute) {
if (configured) {
throw new IllegalStateException("Configuration is frozen");
}
this.attribute = attribute;
}
要是有人問如果我在action mapping中沒有name呢?。。。。暈倒~~~~```
大家學習愉快!
這個貼子最初是發貼在CJW(world">)的struts專區
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-959591/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CMake 屬性之全域性屬性
- DOM物件屬性(property)與HTML標籤特性(attribute)物件HTML
- CMake 屬性之目標屬性
- CMake 屬性之目錄屬性
- selenium用XPATH直接獲取屬性值 需要使用.get_attribute(“屬性名”)
- Java學習之類的屬性(轉)Java
- WPF 之 依賴屬性與附加屬性(五)
- 教你在WindowsXP中為USB新增“只讀”屬性(轉)Windows
- 為textarea新增maxlength屬性
- js便籤筆記(2)——DOM元素的特性(Attribute)和屬性(Property)JS筆記
- orcale 之遊標的屬性
- React之props屬性React
- Android屬性之excludeFromRecentsAndroid
- React戰記之玩轉Flex佈局(上篇–容器屬性)ReactFlex
- React戰記之玩轉Flex佈局(上篇--容器屬性)ReactFlex
- scss中如果將null作為屬性值會刪除此屬性CSSNull
- 我為什麼不推薦使用BeanUtils屬性轉換工具Bean
- "開啟,另存為,屬性,列印"等14個JS程式碼 (轉)JS
- Android 動畫之屬性動畫Android動畫
- CSS屬性總結之backgroundCSS
- app之使用者屬性APP
- Android之佈局屬性Android
- c#屬性之繼承C#繼承
- 改變檔案屬性 (轉)
- 檔案屬性解釋(轉)
- 屬性列舉法(轉載)
- CSS自定義屬性Expression(轉)CSSExpress
- <a>為空使用href屬性值填充
- 數字作為物件的屬性物件
- runtime為類別增加屬性
- Java物件為空時,不顯示該物件屬性,或者將null轉換為""Java物件Null
- WPF 屬性系統 依賴屬性之記憶體佔用分析記憶體
- CSS之定位和堆疊屬性CSS
- [java IO流]之 Properties屬性集Java
- jQuery屬性操作之.val()函式jQuery函式
- 讀Zepto原始碼之屬性操作原始碼
- Android開發之屬性動畫Android動畫
- SpringBoot配置屬性之MVCSpring BootMVC