struts2中的ognl

來源:互聯網
上載者:User

運算式語言主要有以下幾大好處:

  1. 避免(MyType) request.getAttribute()和myBean.getMyProperty()之類的語句,使頁面更簡潔;
  2. 支援運算子(如+-*/),比普通的標誌具有更高的自由度和更強的功能;
  3. 簡單明了地表達代碼邏輯,使用代碼更可讀與便於維護。

OGNL是通常要結合Struts 2的標誌一起使用,如<s:property value="xx" />等。大家經常遇到的問題是#、%和$這三個符號的使用。下面我想通過例子講述這個問題:

 

“#”主要有三種用途:

  1. 訪問OGNL上下文和Action上下文,#相當於ActionContext.getContext();下表有幾個ActionContext中有用的屬性:

     名稱 作用 例子
    parameters 包含當前HTTP請求參數的Map #parameters.id[0]作用相當於request.getParameter("id")
    request 包含當前HttpServletRequest的屬性(attribute)的Map #request.userName相當於request.getAttribute("userName")
    session 包含當前HttpSession的屬性(attribute)的Map #session.userName相當於session.getAttribute("userName")
    application 包含當前應用的ServletContext的屬性(attribute)的Map #application.userName相當於application.getAttribute("userName")
    attr 用於按request > session > application順序訪問其屬性(attribute) #attr.userName相當於按順序在以上三個範圍(scope)內讀取userName屬性,直到找到為止
  2. 用於過濾和投影(projecting)集合,如books.{?#this.price<100};
  3. 構造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。

“%”符號的用途是在標誌的屬性為字串類型時,計算OGNL運算式的值。

“$”有兩個主要的用途

  1. 用於在國際化資源檔中,引用OGNL運算式,例子請參考《在Struts 2.0中國際化(i18n)您的應用程式》
  2. 在Struts 2設定檔中,引用OGNL運算式,如<action name="AddPhoto" class="addPhoto">
                <interceptor-ref name="fileUploadStack" />            
                <result type="redirect">ListPhotos.action?albumId=${albumId}</result>
            </action>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.