Knight of the round table

          wansong

          Struts2 關于OGNL的%#$的應用

          http://hi.baidu.com/zhouhwbuaa/blog/item/b9b23bfbd478ab106c22eb0e.html

          http://wallboy.javaeye.com/blog/513096  OGNL表達式語言介紹


          訪問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屬性,直到找到為止

          用于過濾和投影(projecting)集合,如books.{?#this.price<100};
          構造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。

          “%”符號的用途是在標志的屬性為字符串類型時,計算OGNL表達式的值。
          “$”有兩個主要的用途,用于在國際化資源文件中,引用OGNL表達式。在Struts 2配置文件中,引用OGNL表達式。



          Struts2中的OGNL表達式語言是對Xwork的OGNL的封裝。我們要理解一下幾點:
          1. Struts2中將ActionContext作為OGNL的上下文環境(ActionContext內部含有一個Map對象)
          2. Struts2中的OGNL表達式語言的根對象是一個ValueStack,ValueStack中的每一個對象都被視為根對象。
          Struts2框架將實例化的Action對象放入ValueStack中,如果是Action鏈,則多個Action都存在于 ValueStack中。而ValueStack中除了Action外,Struts2框架還將 parameters,request,response,session,application,attr等對象放到ValueStack中,訪問這些對象需要加前綴#。

          總結:Struts2中的數據處理基于Xwork的OGNL,它在OGNL的基礎上進行了一定的封裝。OGNL的核心概念是根對象(root)和上下文環境(context)---你可以傳入一個Map對象作為上下文,向其中put進一個對象,那么這個對象可以作為根對象(ognl中可以向函數中傳入不同的Map對象作為根對象來操作,也可以指定不同的根對象,而Struts2中,它固定了根對象ValueStack)。在Struts2 中,ActionContext作為OGNL的上下文環境,它的根對象是一個ValueStack,ValueStack中的每個對象都被視為根對象。 Struts2中的Action作為根對象存在(如果多個Action以chain的形式存在,則多個Action均存在于ValueStack中,均為根對象)。


          <s:property value="user.name" />

          <s:property value="%{#application.myApplicationAttribute}" />
          <s:property value="%{#session.mySessionAttribute}" />
          <s:property value="%{#request.myRequestAttribute}" />
          <s:property value="%{#parameters.myParameter}" />



          posted on 2010-07-23 12:32 w@ns0ng 閱讀(378) 評論(0)  編輯  收藏 所屬分類: Struts

          主站蜘蛛池模板: 鹤峰县| 荔波县| 灵山县| 湖口县| 文安县| 灵石县| 介休市| 大竹县| 嘉黎县| 冀州市| 舒城县| 广昌县| 武威市| 九江市| 天台县| 雅江县| 板桥市| 靖州| 扎鲁特旗| 汶上县| 凌云县| 河西区| 德江县| 新泰市| 卢龙县| 保康县| 恩平市| 通许县| 余姚市| 阿图什市| 璧山县| 江永县| 榆社县| 太仓市| 曲靖市| 察隅县| 叶城县| 浦东新区| 县级市| 伊金霍洛旗| 郎溪县|