ognl表達式中的#%$的作用



1.#號
1.通過#可以獲取到Map中的數據
這時的#就代表了ActionContext對象.也就是相當於ActionContext.getContext();

2.不寫#默認是在root中查找

3.進行投影映射
可以使用struts2提供的一個標籤<s:iterator> 它的用法與<c:forEach>差不多.

<s:iterator value="ps" var="p">  注意:p不是存儲在root中,而是存儲在context中
<s:property value="#p.name"> //在這裏使用時,要在p前加#
</s:iterator>

(下面內容瞭解)
  1)集合的投影(只輸出部分屬性
  <h1>遍歷集合只要name屬性</h1>
<s:iterator value="products.{name}" var="pname"> 
<s:property value="#pname"/>
</s:iterator>
  2)遍歷時,對數據設置條件 
<h1>遍歷集合只要price大於1500商品</h1>
<s:iterator value="products.{?#this.price>1500}" var="product"> 
<s:property value="#product.name"/> --- <s:property value="#product.price"/>
</s:iterator>
  3)綜合
  <h1>只顯示價格大於1500 商品名稱</h1>
<s:iterator value="products.{?#this.price>1500}.{name}" var="pname"> 
<s:property value="#pname"/>
</s:iterator>   
2.關於在頁面上直接構建集合
1.構建List集合
<br>
<s:iterator value="{1,2,3,4}" var="num">
<s:property value="#num" />
</s:iterator>


<hr>
2.構建一個Map集合<br>
<s:iterator value="#{'name':'tom','price':'100'}" var="entry">
<s:property value="#entry.key" />  ----<s:property
value="#entry.value" />
<br>
</s:iterator>


3.關於%使用
%作用是用於標識當前表達式是否被ognl解析器解析.

用法一: 結合struts2 表單表單使用, 通過%通知struts, %{}中內容是一個OGNL表達式,進行解析 
  <s:textfield name="username" value="%{#request.username}"/>
  用法二: 設置ognl表達式不解析 %{'ognl表達式'}
  <s:property value="%{'#request.username'}"/>



4.$用法

1.可以在struts.xml配置文件中使用.
例如:文件下載時
<param name="contentType">${contentType}</param>

2.可以在國際化文件中使用
在properties文件 msg=歡迎您, ${#request.username}
在頁面
<s:i18n name="messages">
<s:text name="msg"></s:text>
</s:i18n>
* 自動將值棧的username 結合國際化配置信息顯示 


3.可以在校驗文件中使用
<field name="password">
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>密碼長度必須在${minLength}-${maxLength}位間</message>
</field-validator>
</field>
結論: #用於寫ognl表達式獲取數據,% 控制ognl表達式是否解析 ,$ 用於配置文件獲取值棧的數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章