set和push方法壓入棧頂的值獲取方法


向值棧里面放數據(儲存的位置在root域里面)

向值棧放數據有多種方式,往往我們只用其中一種

1.set方法壓棧

    1)在Action中獲取值棧對象,使用set()方法向值棧存放數據

        ActionContext.getContext().getValueStack().set("key","value");

    2)在jsp中獲取值棧數據,根據set方法的名稱(key)獲取

        <s:property value="key"></s:property>

2.push方法壓棧

    1)在Action中獲取值棧對象,使用push()方法向值棧存放數據,push方法只有設置的值(value),沒有名稱(key)

         ActionContext.getContext().getValueStack().push("XXX");

    2)push()方法會把值棧中存放的數據存到top數組中,push的取值方法有點特殊,是通過直接把棧頂元素取出來的。

    3)在jsp中獲取push方法設置的值,根據top數組獲取值

        <s:property value="[0].tap"></s:property>//這里的top是root的域實體對象名稱,也就是List對象的名稱

3.在action定義變量,生成變量的get方法

 

向值棧中放對象

實現步驟:

第一步:定義對象變量

第二步:生成變量的get方法

第三步:在執行的方法里面向對象中設置值

向值棧中放List對象

第一步:定義List集合變量

第二步:生成變量的get方法

第三步:在執行的方法里面向List集合設置值

 

 

4.擴展

    值棧:在struts2里面提供了本身的一種存儲機制,類似於域對象,是值棧,可以存值和取值。

        

servlet和action的區別:

        Servlet:默認在第一次訪問的時候創建,只創建一次,是一個單例對象!!

        Action:一樣是訪問的時候創建對象,每次訪問action的時候都會創建新的action對象,創建多次,是一個多實例對象!!

        

值棧的存儲位置:

  • 每次訪問action的時候都會創建action對象。
  • 在每個action對象里面都會有一個值棧對象。(注意:每個action對象只有一個)(在同一個action值棧只有一個)

    

獲取值棧對象有多種方式!

  • 常用的方式:使用ActionContext對象里面的方法(getValueStack())獲取值棧對象。

    

   值棧內部結構

    棧:先進后出!

    最上面是棧頂的元素,向棧里面放數據的操作叫做壓棧。

    值棧分為兩個部分,root和context

    root專業叫做ObjectStack(對象棧) 
   context專業叫做ContextMap(Map棧),Map類型的棧。(在我們訪問里面的對象的時候,會通過出棧的方式取東西,效率比較低,一般我們不會用)

    root結構是List集合

    context結構是Map集合

    (要想查看到值棧的結構可以用調試(debug)的方法,通過struts2的標簽<s:debug></s:debug>,值棧確實分為兩個部分,一個root,一個context    )


免責聲明!

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



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