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
b,構建List

1.區別

用法區別:OGNL是通常要結合Struts 2的標誌一起使用,如 struts頁面中不能單獨使用,el可以單獨使用 ${sessionScope.username}

頁面取值區別這裏寫圖片描述

2.ognl講解

OGNL是Struts 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

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





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

3.$符號

OGNLreg.agerange= {min}同${max}之間。 在Struts 2框架的配置文件中引用OGNL表達式,例如下面的代碼片斷所示:

<validators>  
02.    <field name=”intb”>  
03.            <field-validator type=”int”>  
04.            <param name=”min”>10</param>  
05.            <param name=”max”>100</param>  
06.            <message>BAction-test校驗:數字必須爲${min}爲${max}之間!</message>  
07.        </field-validator>  
08.    </field>  
09.</validators>  





01.<validators>  
02.    <field name=”intb”>  
03.            <field-validator type=”int”>  
04.            <param name=”min”>10</param>  
05.            <param name=”max”>100</param>  
06.            <message>BAction-test校驗:數字必須爲${min}爲${max}之間!</message>  
07.        </field-validator>  
08.    </field>  
09.
10.</validators>  

11. 

發佈了30 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章