Struts2-Value Stack淺析

Value Stack的做用:

1.       能夠做爲一個數據中轉站 web

2.       用於在前臺-後臺之間傳遞數據,最典型的作法就是struts2標籤也ognl表達式的結合。我用得最多的就是數據回顯。 spa

Value Stack的生命週期:

         struts-default.xml文件中決定了在web容器啓動時將會建立OgnlValueStackFactory對象,該對象實現了ValueStackFactory接口,負責ValueStack的建立工做。 xml

         ValueStack的生命週期是隨着request的建立而建立,隨request的銷燬而銷燬。具體可見源代碼: 對象

         PrepareOperations類的createActionContext中有 繼承

至於清理工做,struts統一放在了PrepareOperations類的cleanupRequest方法中。 接口

Value Stack結構:

         主要看OgnlValueStack類,此類實現了ValueStack接口。 生命週期

OgnlValueStack中有兩個相當重要的東西, 內存

,簡稱「對象棧「Map get

CompoundRoot:

CompoundRoot繼承了ArrayList類,便是一個List集合,詳見源碼CompoundRoot類。 源碼

Context:context其實是一個hashMap

其中_values就是平時使用的map棧,而_root只是對對象棧的引用。

使用Value Stack:

經常使用方法解析:

1.       push方法:

,再查看root的push方法

,頓時明白什麼叫將對象壓入棧頂了。

2.       set(String key,Object o)方法:

再看

也就是說第一次使用該方法時,struts會建立一個新的map

3.       pop方法:

,移除棧頂對象,查看rootpop方法

4.       peek方法

獲取棧頂對象,作法與pop方法相同,只不過是get數據。

因此便可總結出使用方法:

1.       將數據放入值棧

將對象放入棧頂:

a)   ActionContext.getContext().getValueStack().push("aa);

b)   ActionContext.getContext().getValueStack().getRoot().add(0,"bb");

將數據放入map

ActionContext.getContext().getValueStack().set(「a」,」a」);

2.       從值棧中獲取數據

a)         獲取棧頂數據

                                       i.              ActionContext.getContext().getValueStack().peek();

                                     ii.              ActionContext.getContext().getValueStack().getRoot().get(0);

通常狀況下,將對象放入棧頂以前先移除棧頂對象,這樣能夠節省內存空間。

重要:

1.       Interator標籤當前迭代的對象在棧頂。

2.       Iterator標籤的value能夠不寫,默認是迭代棧頂元素。

相關文章
相關標籤/搜索