ONGL表達式的用法


什么是ognl?

  • OGNL是Struts2中使用的一種表達式語言。
  • 它可以用於在JSP頁面,使用標簽方便的訪問各種對象的屬性;
  • 它可以用於,在Action中獲取傳遞過來的頁面中的參數(並進行類型轉換);
  • 它還可以用在struts2的配置文件中! 

 在OGNL的使用中,需要訪問到一系列的對象,這些對象都存放在OGNL的context(上下文)中,context是一個Map結構,存放了一系列的key-value對,實際上,它和ActionContext類是相對應的。在OGNL的context中,有一個根對象為ValueStack,該對象實際上是一個棧,但在Struts 2框架中只存放了一個對象,就是action對象。在action中數據會被壓入值棧中,那么在頁面中就可以通過ongl表達式取出值棧中的值。

 

(要了解值棧的概念可以看大佬的這篇 Struts2 | 深入淺出理解struts2中的值棧https://www.jianshu.com/p/82954b841b5e)  

 

ognl表達式的使用

ognl表達式要結合Struts的標簽庫來使用,主要有#、%和$三個符號的使用。

 

1、#符號的三種用法

1)訪問非根元素(在struts中值棧為根對象),如ongl上下文和Action上下文,這里#相當於ActionContext.getContext()

下表有幾個ActionContext中有用的屬性:

屬性 說明 表達式 表達式說明
parameters 包含當前HTTP請求參數的Map #parameters.paramName[0] 相當於request.getParameter("paramName");
request 包含當前HttpServletRequest的屬性(attribute)的Map #request.key 相當於request.getAttribute(“key”)
session 包含當前HttpSession的屬性(attribute)的Map #session.key 相當於session.getAttribute(“key”)
application 包含當前應用的ServletContext的屬性(attribute)的Map #application.key 相當於application.getAttribute(“key”)

 

 

 

 

 

 注:attr 用於按request > session > application順序訪問其屬性(attribute),#attr.key相當於按順序在以上三個范圍(scope)內讀取key對應的屬性值,直到找到為止。

 

 2)用於過濾和投影(projecting)集合,

如: persons.{?#this.age>20}。

 

3)用來構造Map,

如下面的: #{’foo1′:’bar1′,’foo2′:’bar2′}。

 

 2、%符號

 %符號用於標志的屬性為字符串類型時,計算ognl表達式的值,示例:

 

<center>
    <s:set var="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>
</center>

 

  運行結果:

 

 

 

 3、$符號

 $符有兩種用法:

(1)在國際化資源文件中,引用OGNL表達式。

(2)在Struts 2配置文件中,引用OGNL表達式:

 

<action name=”saveUser” method=”save”>
    <result type=”redirect”>listUser.action?msg=${msg}</result>
</action>


<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>

 

 

 

需要注意的是:在Struts2的標簽中不能用EL表達式,而可以用OGNL表達式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM