OGNL

Ognl總結($,%,$)

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:

  1. <action name="saveUser" class="userAction" method="save">   
  2.   
  3. <result type="redirect">listUser.action?msg=${msg}</result>   
  4.   
  5. </action>   
  6.   
  7. <action name="saveUser" class="userAction" method="save">       
  8.   
  9. <result type="redirect">listUser.action?msg=${msg}</result>   
  10.   
  11. </action> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章