用法區別: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.getAttribute(“userName”) | #application.userName ${applicationScope.username} | |
attr | 用于按request > session > application順序訪問其屬性(attribute) | #attr.userName相當于按順序在以上三個范圍(scope)內讀取userName屬性,直到找到為 |
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
[html] view plaincopyprint?<s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” /> <p>The value of key “foo1″ is <s:property value=”#foobar[‘foo1’]” /></p> <p>不使用%:<s:url value=”#foobar[‘foo1’]” /></p> <p>使用%:<s:url value=”%{#foobar[‘foo1’]}” /></p>
[html] view plain copy print?<s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” /> <p>The value of key “foo1″ is <s:property value=”#foobar[‘foo1’]” /></p> <p>不使用%:<s:url value=”#foobar[‘foo1’]” /></p> <p>使用%:<s:url value=”%{#foobar[‘foo1’]}” /></p> 
<s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” /><p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p><p>不使用%:<s:url value=”#foobar['foo1']” /></p><p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>
3.$符號
符號主要有兩個方面的用途。在國際化資源文件中,引用OGNL表達式,例如國際化資源文件中的代碼:reg.agerange=國際化資源信息:年齡必須在 {min}同${max}之間。 在Struts 2框架的配置文件中引用OGNL表達式,例如下面的代碼片斷所示:
[html] view plaincopyprint?<validators> <field name=”intb”> <field-validator type=”int”> <param name=”min”>10</param> <param name=”max”>100</param> <message>BAction-test校驗:數字必須為min為 {max}之間!</message> </field-validator> </field> </validators>
[html] view plain copy print?<validators> <field name=”intb”> <field-validator type=”int”> <param name=”min”>10</param> <param name=”max”>100</param> <message>BAction-test校驗:數字必須為min為 {max}之間!</message> </field-validator> </field> </validators> 
<validators> <field name=”intb”> <field-validator type=”int”> <param name=”min”>10</param> <param name=”max”>100</param> <message>BAction-test校驗:數字必須為${min}為${max}之間!</message> </field-validator> </field></validators>待續
新聞熱點
疑難解答