1. 程式人生 > >[20150911]el表示式跟ognl表示式的區別

[20150911]el表示式跟ognl表示式的區別

EL表示式:
>>單純在jsp頁面中出現,是在四個作用域中取值,page,request,session,application.
>>如果在struts環境中,它除了有在上面的四個作用域的取值功能外,還能從值棧(valuestack)中取值.
>>特點1:${name},name在值棧中的查詢順序是:先從物件棧中取,取到終止,否則,向map中取。
>>特點2:在物件棧的查詢順序是,先從model中找是否有name這個屬性,找到終止,否則,找action中是否有name這個全域性變數。
>>特點3:${#name},裡面的是不帶#號的。
>>特點4:如果放在物件棧中的是一個自定義的物件,那麼${property}裡面可以直接去該物件的屬性值,不用這樣${object.property}


OGNL表示式:
1:讀取從後臺傳遞的值
%{#name}:表示從值棧的map中取值
%{name}:表示從值棧的物件棧中取值
%{#request.name}:表示從request域中取值

2:自己構建資料
  a,構建Map<s:iterator var="map" value="#{'key1':'value1','key2':'value2'}"/>
  b,構建List<s:iterator var="list" value="{'one','two','three'}">

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:setname=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />
  2. <p>The value of key “foo1″ is <s:propertyvalue=”#foobar['foo1']” /></p>
  3. <p>不使用%:<s:urlvalue=”#foobar['foo1']” /></p>
  4. <p>使用%:<s:urlvalue=”%{#foobar['foo1']}” /></p>
  1. <s:setname=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />
  2. <p>The value of key “foo1″ is <s:propertyvalue=”#foobar['foo1']” /></p>
  3. <p>不使用%:<s:urlvalue=”#foobar['foo1']” /></p>
  4. <p>使用%:<s:urlvalue=”%{#foobar['foo1']}” /></p>

3.$符號

$符號主要有兩個方面的用途。    在國際化資原始檔中,引用OGNL表示式,例如國際化資原始檔中的程式碼:reg.agerange=國際化資源資訊:年齡必須在${min}同${max}之間。     在Struts 2框架的配置檔案中引用OGNL表示式,例如下面的程式碼片斷所示:

  1. <validators>
  2. <fieldname=”intb”>
  3. <field-validatortype=”int”>
  4. <paramname=”min”>10</param>
  5. <paramname=”max”>100</param>
  6. <message>BAction-test校驗:數字必須為${min}為${max}之間!</message>
  7. </field-validator>
  8. </field>
  9. </validators>
  1. <validators>
  2.     <fieldname=”intb”>
  3.             <field-validatortype=”int”>
  4.             <paramname=”min”>10</param>
  5.             <paramname=”max”>100</param>
  6.             <message>BAction-test校驗:數字必須為${min}為${max}之間!</message>
  7.         </field-validator>
  8.     </field>
  9. </validators>