利用投影獲取屬性
利用投影獲取List中對(duì)象的username屬性時(shí)陪拘,其中{}表示的是一個(gè)集合.stus.{username}就表示將suts中所有的username屬性取出組成一個(gè)新的列表
利用選擇獲取屬性
OGNL表達(dá)式是很靈活的杀狡,可以同時(shí)使用選擇技術(shù)與投影技術(shù)獲取屬性.
使用選擇技術(shù)時(shí),#this代表當(dāng)前元素,問號(hào)?是把所有滿足條件的元素都取出來.
上箭頭是開始的意思,所以stus.{#this.grade>=60}.{username}輸出的是[張三].
注意汗洒,此時(shí)輸出文本中包含中括號(hào)珠漂,這表示它是一個(gè)列表,而stus.{?#this.grade>=60}.{username}[0]輸出的是張三,是字符串笼才,二者是不同的.
美元符號(hào)$是結(jié)束的意思漱受,所以stus.{$#this.grade>=60}.{username}輸出的是[王五]
這三個(gè)符合:問號(hào)、上箭頭骡送、美元符所返回的都是List.
補(bǔ)充
1.當(dāng)OGNL取不到值的時(shí)候昂羡,它不會(huì)報(bào)錯(cuò),而是什么都不顯示.
<s:property value="[0]"/>
返回的是ValueStack中從上至下的所有的Object.
<s:property value="[1]"/>
返回的是ValueStack中從上至下的第二個(gè)Object.
<s:property value="[0].username"/>
返回的是成員變量username的值.假設(shè)ValueStack中存在兩個(gè)Action的話摔踱,如果第一個(gè)Action如果沒有username變量,那么它會(huì)繼續(xù)找第二個(gè)Action虐先。那么在什么情況下ValueStack中會(huì)存在兩個(gè)Action呢? 答案是在struts.xml中配置的是從一個(gè)Action通過
<result type="chain">
跳轉(zhuǎn)到另一個(gè)Action時(shí)。
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
在Struts2.1.6中必須設(shè)置struts.ognl.allowStaticMethodAccess為true之后,才允許使用OGNL訪問靜態(tài)方法派敷。而在Struts2.0.11則無需設(shè)置蛹批,即可直接訪問.