struts-值棧

1. 關於值棧:session

  • helloworld時, ${productName} 讀取productName 的值,實際上該屬性並不在request 等域對象中,而是從值棧中獲取的
  • ValueStack: 
    • 能夠從ActionContext 中獲取值棧對象
    • 值棧分爲兩個邏輯部分
      • Map棧: 實際上OgnlContext 類型,是個Map,也是對ActionContext 的一個引用,裏面存放着各類Map:
        • requestMap
        • sessionMap
        • applicationMap
        • parametersMap
        • attr
      • 對象棧:其實是CompindRoot 類型,是一個使用ArrayList 定義的棧。裏邊保存各類和當前Action 實例相關的對象,是一個數據結構意義的棧

 

2. Struts2 利用s:property 標籤和OGNL 表達式來讀取值棧中的屬性值數據結構

  • 值棧中的屬性值:
    • 對於對象棧: 對象中某一個對象的屬性值
    • Map 棧: request, session, application 的一個屬性值 貨 一個請求參數的屬性值
  • 讀取對象棧中對象的屬性
    • 若想訪問Object Stack 裏面的某一個屬性,能夠使用以下幾種形式之一:
      • object.propertyName
      • object['propertyName']
      • object["propertyName"]
    • ObjectStack 裏面的對象能夠經過一個從零開始的下標來引用。ObjectStack 裏面的棧頂對象能夠用[0] 來引用,它下面的的那個對象能夠用[1] 引用

[0].messageapp

    • [n] 的含義是從第n 個開始搜索,而不是隻搜索n個對象
    • 若從棧頂對象開始搜索,則能夠省略下標部分:message
    • 結合s:property 標籤:<s:property value="[0].message" />  <s:property value="message" />(一般狀況下采用這種方式)

 3. 默認狀況下, Action 對象會被Struts2 自動的放到值棧的棧頂對象

 

 

4. Struts2 自動把Action 對象放入到值棧中blog

放入的時間點爲:struts2 終將調用Action 類的Action 方法。但在調用該方法以前:io

  • 先建立一個StrutsActionProxy 對象
  • 在建立StrutsActionProxy 以後,對其進行初始化時,把Action對象放入了值棧中。
相關文章
相關標籤/搜索