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