Ognl表達式struts標簽“%,#,$”
1、什么是Ognl?
OGNL(Object-Graphic Navigation Language),對象圖道行語言。是一種可以方便操作對象屬性的開源表達式語言。
2、特點?
a、支持對象的方法調用,形式,eg:objName.methodName();
b、支持靜態類的方法調用和值訪問,expression:@【類全名(包括包路徑)】@【方法名|值名】,eg:@tutorial.MyConstant@App_NAME;
c、支持賦值操作和表達式串聯,eg:price=100,discount=80,calculatePrice()//返回80???
d、訪問OGNL上下文(OGNL context)和ActionContext
e、操作集合對象
3、使用OGNL表達式
1)“#”符號有三種用途
a、訪問非根對象(struts中值棧為根對象),eg:OGNL上下文和Action上下文,#相當于ActionContext.getContext();下表有幾個ActionContext中有用的屬性:
名稱 作用域
eg:
1-1)parameters :包含當前HTTP請求參數的Map
#parameters.id[0]=>作用相當于request.getParameter("id")
1-2)request:包含當前HttpServletRequest的屬性(attribute)的Map
#request.userName=>作用相當于request.getAttribute("userName");
1-3)session:包含當前HttpSession屬性(attribute)的Map
#session.userName=>session.getAttribute("userName");
1-4)application:包含當前應用的ServletContext的屬性(attribute)的Map
#application.userName=>application.getAttribute("userName");
notice:attr用于按request>session>application順序訪問其屬性(attribute),#attr.userName;構造Map:{'foo1':'bar1','foo2':'bar2'}
b、用于過濾和投影
eg:books.{?#this.price>35}
c、用于構建Map集合
在頁面上取一個Map的值:
eg:<s:property value="#myMap['foo1']"/>
2)“%”符號的用途是在標簽的屬性被理解為字符串類型時,告訴執行環境%{}里的是OGNL表達式,很有點類似javascript里面的eval_r()功能,例如 :
var oDiv = eval_r("document.all.div"+index) var oDiv = eval_r("document.all.div"+index)
當index變量為1時,語句就會被當作var oDiv = document.all.div1 var oDiv = document.all.div1來執行。%{}就是起這個作用。
eg:
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
<s:property value="#myMap['key1']"/>
<s:url value="#myMap['key1']"> //輸出:#myMap['key1']
<s:url value="%{#myMap['key1']}"//輸出:value1
notice:struts2里不同的標簽對于ognl表達式的理解是不一樣的
3)“$”符號有兩種用途
3-1)在國際化資源文件中,引用OGNL表達式
3-2)在struts2配置文件中,引用OGNL表達式
eg:
- <action name="saveUser" class="userAction" method="save">
- <result type="redirect">listUser.action?msg=${msg}</result>
- </action>
- <action name="saveUser" class="userAction" method="save">
- <result type="redirect">listUser.action?msg=${msg}</result>
- </action> 愿望:http://www.cnblogs.com/luoxing/archive/2012/02/20/2359603.html
文章列表