struts2 OGNL,struts2 表達式語言,Struts2 中OGNL表達式的用法,Struts2 #,表達式語言的好處,Struts2 $,struts2 井號,星號,百分號
表達式語言主要有以下幾大好處:
1. 避免(MyType) request.getAttribute()和myBean.getMyProperty()之類的語句,使頁面更簡潔;
2. 支持運算符(如+-*/),比普通的標誌具有更高的自由度和更強的功能;
3. 簡單明瞭地表達代碼邏輯,使用代碼更可讀與便於維護。
Struts2 中OGNL表達式的用法:
OGNL(Object-Graph Navigation Language),可以方便地操作對象屬性的開源表達式語言;
“#”主要有三種用途:
1. 訪問OGNL上下文和Action上下文,#相當於ActionContext.getContext();下表有幾個ActionContext中有用的屬性:
名稱 作用 例子
parameters 包含當前HTTP請求參數的Map #parameters.id[0]作用相當於request.getParameter("id")
request 包含當前HttpServletRequest的屬性(attribute)的Map #request.userName相當於request.getAttribute("userName")
session 包含當前HttpSession的屬性(attribute)的Map #session.userName相當於session.getAttribute("userName")
application 包含當前應用的ServletContext的屬性(attribute)的Map #application.userName相當於application.getAttribute("userName")
attr 用於按request > session > application順序訪問其屬性(attribute) #attr.userName相當於按順序在以上三個範圍(scope)內讀取userName屬性,直到找到爲止
2. 用於過濾和投影(projecting)集合,如books.{?#this.price<100};
3. 構造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
“%”的用途是在標誌的屬性爲字符串類型時,計算OGNL表達式的值。例如在Ognl.jsp中加入以下代碼:
<hr />
<h3>%的用途</h3>
<p><s:url value="#foobar['foo1']" /></p>
<p><s:url value="%{#foobar['foo1']}" /></p>
“$”有兩個主要的用途 :
1. 用於在國際化資源文件中,引用OGNL表達式,例子請參考《在Struts 2.0中國際化(i18n)您的應用程序》
2. 在Struts 2配置文件中,引用OGNL表達式,如
<action name="AddPhoto" class="addPhoto">
<interceptor-ref name="fileUploadStack" />
<result type="redirect">ListPhotos.action?albumId=${albumId}</result>
</action>
例如: Struts2 在標籤的ID屬性中 獲取 索引:
<s:iterator value="userList" status="u">
<s:hidden id="%{u.index }" value="%{name }"></s:hidden>
<s:hidden id="%{u.index }" value="%{sex }"></s:hidden>
</s:iterator>
//注意:
//Struts2標籤與內部標籤之間元素互用使用%{u.index }或者%{#u.index },比如:<s:iterator>
與<s:a>
//Struts2標籤與外部標籤元素互用則使用 ${#u.index } 比如:<s:iterator>與<a>