1)涉及問題:取值時什麼時候該加#,什麼時候不加?
2)介紹
Struts2中的property標籤
<s:property value="...."/>
用於獲取ognlcontext對象中的屬性值,亦稱爲數據標籤。其中value的值爲具體的屬性名稱。獲取值時,一般有兩種情況:
1)在獲取request/session/application/attr/parameters這五個範圍時,需要明確指定範圍,比如
<s:property value="#request.屬性名" />
範圍前面需要帶#號才能正確獲取屬性值。2)如果取ValueStack中的值時,是不需要帶#的,可以直接取。
比如Action實例的屬性值是存儲在ValueStack中的,所以取Action中的屬性是不需要帶#號的。
然而,在使用<s:iterator id="it" value="attrName">時,後使用it去取對象屬性時,是需要加#號的。
注:<s:property>要正確獲取Action中的屬性值,必須在在action中設置了該屬性的setter/getter方法,否則它不會被攔截器處理。
value參數的類型是object,可以理解爲這個默認是會解析成ognl表達式的。
比如需要輸入一個字符串string
<s:property value="'string'">
注意,在value裏面的字符串string外面加了單引號,這樣不會將string解析成ognl表達式了。.故value的值解析成OGNL表達式,在此表達式內,有些對象的值的使用與java代碼相似,但不相同,以下取幾個例子
1)value爲String對象時,一些常用的String子函數使用
string.length() //字符串長度
string.substring(0,130) //按起末位取子串
2)value爲List時在獲取List的大小時,可以使用其變量的size值,比如取List對象group的數組長度
<s:property value="groups.size" />
3)value內還可以寫表達式,比如輸出一個整型變量page的+1值<s:property value="page+1" />
原文地址:http://blog.csdn.net/wenlele/article/details/6843067