ognl和el表達式的區別

1.區別

用法區別:OGNL是通常要結合Struts 2的標誌一起使用,如<s:property value="#xx" /> struts頁面中不能單獨使用,el可以單獨使用 ${sessionScope.username} 

 

頁面取值區別:

 名稱

servlet

ognl                                                                           el

parameters

request.getParameter("username")

#username                                             ${username}

request

request.getAttribute("userName")

#request.userName                                ${requestScope.username}

session

session.getAttribute("userName")

#session.userName                               ${sessionScope.username}

application

application.getAttribute("userName")

#application.userName                          ${applicationScope.username}

attr

用於按request > session > application順序訪問其屬性(attribute)

#attr.userName相當於按順序在以上三個範圍(scope)內讀取userName屬性,直到找到爲

 

2.ognl講解

OGNLStruts 2默認的表達式語言。是Object Graphic Navigation Language(對象圖導航語言)的縮寫,它是一個開源項目。

 1.#符號的用途一般有三種。
   1)訪問非根對象屬性,例如示例中的#session.msg表達式,由於Struts 2中值棧被視爲根對象,所以訪問其他非根對象時,需要加#前綴。實際上#相當於ActionContext.getContext();;#session.msg表達式相當於ActionContext.getContext().getSession(). getAttribute(”msg”) 。
    2)用於過濾和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

    3)用來構造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。


2.%符號
%符號的用途是在標誌的屬性爲字符串類型時,計算OGNL表達式的值。如下面的代碼所示:
構造Map

  1. <s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />  
  2. <p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p>  
  3. <p>不使用%:<s:url value=”#foobar['foo1']” /></p>  
  4. <p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>   

3.$符號

$符號主要有兩個方面的用途。
   在國際化資源文件中,引用OGNL表達式,例如國際化資源文件中的代碼:reg.agerange=國際化資源信息:年齡必須在${min}同${max}之間。
    在Struts 2框架的配置文件中引用OGNL表達式,例如下面的代碼片斷所示:
  1. <validators>  
  2.     <field name=”intb”>  
  3.             <field-validator type=”int”>  
  4.             <param name=”min”>10</param>  
  5.             <param name=”max”>100</param>  
  6.             <message>BAction-test校驗:數字必須爲${min}爲${max}之間!</message>  
  7.         </field-validator>  
  8.     </field>  
  9. </validators> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章