OGNL的使用

 

  1.  訪問Action中的普通屬性: <s:property value="loginname"/><br/>  
  2.  訪問Action中的對象屬性: <s:property value="user.birthday"/><br/>  
  3.  訪問Action中的Set屬性: <s:property value="courseSet.toArray()[0]"/><br/>  
  4.  訪問Action中的List屬性: <s:property value="list[0]"/><br/>  
  5.  訪問Action中的Map屬性的鍵: <s:property value="map.keys.toArray()[1]"/><br/>  
  6.  訪問Action中的Map屬性的值: <s:property value="map.values.toArray()[1]"/><br/>  
  7. 訪問Action中的Map屬性的指定鍵對應的值: <s:property value="map['z']"/><br/>   
  8. 訪問Action中的Map屬性的大小: <s:property value="map.size"/><br/>   
  9. <hr/>  
  10. 訪問ActionContext中的普通屬性:<s:property value="#inte"/><br/>  
  11. 訪問ActionContext中的對象屬性:<s:property value="#user2.loginname"/><br/>  
  12. <hr/>  
  13. 訪問Action中的普通方法:<s:property value="getAppName()"/><br/>  
  14. 訪問ActionContext中的某個對象上的普通方法:<s:property value="#user2.info()"/><br/>  
  15. <hr/>  
  16. 訪問靜態屬性:<s:property value="@java.lang.Math@PI"/><br/>  
  17. 訪問靜態方法:<s:property value="@java.lang.Math@floor(44.56)"/><br/>  
  18. 訪問Math類中的靜態方法:<s:property value="@@floor(44.56)"/><br/>  
  19. <hr/>  
  20. 調用java.util.Date的構造方法:<s:date name="new java.util.Date()" format="yyyy-MM-dd HH:mm:ss"/><br/>  
  21. 調用java.util.Date的構造方法建立對象,再調用它的方法:<s:property value="new java.util.Date().getTime()"/><br/>  
  22. <hr/>  
  23. 投影查詢:獲取userList中全部loginname的列表:<s:property value="userList.{loginname}"/><br/>  
  24. 選擇查詢:獲取userList中全部score大於60的loginname列表:<s:property value="userList.{?#this.score>60.0}.{loginname}"/><br/>  
  25. 選擇查詢:獲取userList中全部score大於60而且gender爲true的loginname列表:<s:property value="userList.{?(#this.score>60.0 && #this.gender)}.{loginname}"/><br/>  
  26. 選擇查詢:獲取userList中全部score大於60而且gender爲true的第一個元素的loginname:<s:property value="userList.{^(#this.score>60.0 && #this.gender)}.{loginname}"/><br/>  
  27. 選擇查詢:獲取userList中全部score大於60而且gender爲true的最後一個元素的loginname:<s:property value="userList.{$(#this.score>60.0 && #this.gender)}.{loginname}"/><br/>  
  28. <hr/>  
  29. 訪問名爲xxx的請求參數對應的第一個值:<s:property value="#parameters.xxx[0]"/><br/>  
  30. 訪問經過ActionContext中放入Request中的屬性:<s:property value="#request.reqAtt"/><br/>  
  31. 訪問經過ServletActionContext中放入Request中的屬性:<s:property value="#request.reqAtt2"/><br/>  
  32. 訪問經過ActionContext中放入Session中的屬性:<s:property value="#session.sesAtt"/><br/>  
  33. 訪問經過ServletActionContext中放入Session中的屬性:<s:property value="#session.sesAtt2"/><br/>  
  34. 訪問經過ActionContext中放入ServletContext中的屬性:<s:property value="#application.appAtt"/><br/>  
  35. 訪問經過ServletActionContext中放入ServletContext中的屬性:<s:property value="#application.appAtt2"/><br/>  
  36. 直接訪問屬性域中指定名稱的屬性對應的值:<s:property value="#attr.sesAtt2"/><br/>  
  37. <br/><br/><hr/>  
  38. <s:iterator value="userList" status="vs">  
  39.     <s:if test="%{#vs.odd}">  
  40.         <span style="color: red">  
  41.             <s:property value="#vs.count"/>: <s:property value="loginname"/>,<s:date name="birthday" format="yyyy-MM-dd HH:mm:ss"/><br/>  
  42.         </span>  
  43.     </s:if>  
  44.     <s:else>  
  45.         <span style="color: blue">  
  46.             <s:property value="#vs.count"/>: <s:property value="loginname"/>,<s:date name="birthday" format="yyyy-MM-dd HH:mm:ss"/><br/>  
  47.         </span>  
  48.     </s:else>  
  49. </s:iterator>  
  50. <hr/><s:debug/>  
  51.   </body>  
  52. </html></span></span>  

 

總結:html

在上邊你們都好奇爲何都用struts的S標籤,由於OGNL是一般要結合Struts 2的標誌一塊兒使用,如<s:property value="xx" />java

 

 Action類與JSP頁面之間的數據傳遞session

 1) 經過HttpServletRequest,HttpSession,ServletContext來傳遞數據。app

    a) Action中傳數據:在Action類的請求處理方法中先獲取各個做用域對象jsp

    ServletActionContext.getRequest();this

    ServletActionContext.getRequest().getSession();url

    ServletActionContext.getServletContext();spa

          而後調用相應的setAttribute(String "鍵", Object 值);線程

    b) 在JSP頁面中取數據:可使用EL表達式或代碼片斷來取出對應做用域中屬性值。debug

    c) 頁面中的請求參數傳遞到Action中時,Action中直接定義對應名稱的屬性,並提供setter方法便可封裝此數據。

    

 2) 經過ActionContext實例來傳遞數據。 ActionContext針對每一個正在執行Action的線程中綁定一份。

   a) Action中經過ActionContext傳遞數據。

      ActionContext提供了put(String "鍵", Object 值);  //數據不會映射到HttpServletRequest中。

      ActionContext提供的getSession().put(String "鍵", Object 值);  //數據會自動映射到HttpSession中。

      ActionContext提供的getApplication().put(String "鍵", Object 值); //數據會自動映射到ServletContext中。

   b) 在JSP頁面取數據:struts2推薦使用OGNL來取ActionContext中的數據。

 

 

1. Struts2中的OGNL的使用。

 

2. OGNL:對象圖導航語言。經過OGNL表達式能夠獲取對象的屬性,調用對象的方法,或構造出對象。

  1) OGNL上下文中有一個根對象。這個根對象能夠直接獲取。不須要#。

  2)支持常量:

         字符串常量、字符常量、

         數值常量:int、long、float、double

         布爾常量:true、false

    Null常量 : null

         支持操做符:支持Java的全部操做符,還支持特有的操做符: ,、 {}、in、not in;

 

 Struts2中的OGNL:

  1) Struts2將ActionContext設置爲OGNL上下文,並將值棧(ValueStack)做爲OGNL的根對象放置到ActionContext中。

  2) Struts2老是把當前Action實例放置在值棧的棧頂。因此,在OGNL中引用Action中的屬性也能夠省略「#」。

  

 經常使用標籤

 1) <s:property value="OGNL"/>

 2) <s:date name="OGNL" format=""/>

 3) <s:if test="OGNL"></s:if><s:elseif test="OGNL"></s:elseif><s:else></s:else>

★4) <s:iterator value="OGNL" status="vs">...</s:iterator>

 5) <s:debug/>

 

 

struts2中#、%和$這三個符號的使用方法【摘自max struts2教程】 

 

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屬性,直到找到爲止 

     二、用於過濾和投影(projecting)集合,如books.{?#this.price<100}; 

     三、構造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。 

 

2、"%"的用法 

    「%」符號的用途是在標誌的屬性爲字符串類型時,計算OGNL表達式的值。例如在Ognl.jsp中加入如下代碼: 

    <h3>%的用途</h3> 

    <p><s:url value="#foobar['foo1']" /></p> 

    <p><s:url value="%{#foobar['foo1']}" /></p> 

 

3、"$"的用法 

    一、用於在國際化資源文件中,引用OGNL表達式 

    二、在Struts 2配置文件中,引用OGNL表達式 

     例如: 

         <action name="AddPhoto" class="addPhoto"> 

            <interceptor-ref name="fileUploadStack" />            

            <result type="redirect">ListPhotos.action?       albumId=${albumId}</result> 

        </action>

相關文章
相關標籤/搜索