【Struts2】值棧

值棧的結構:
這裏寫圖片描述
右邊放的是一個個對象。並且裏面有一些對象。
Map的操作, put(k,V); Get(k)
Stack的操作是,push(obj) 壓棧 ;pop(obj);

結合—————–

一:存數據的過程
上文中,我們說到Struts2 的攔截器。那麼在攔截的過程中會先創建值棧,在值棧裏面放了一些初始化的數據。例如request,session,application等等。 如果應用過程中想用的話,直接用#就可以getSeeion到。
也會在棧中放入action對象。

同時還會經過其它攔截器。它會繼續在值棧中添加信息。比如參數攔截器會繼續在值棧中添加參數信息。ModelDriven 攔截器是把model放到棧頂。

實現的時候,也就是在對應的action中去實現ModelDriven接口。例如:

public class RoleAction  extends ActionSupport implements ModelDriven<Role>

其中接口裏面只有唯一的一個接口方法。我們實現如下:

private Role model=new Role();
    public Role getModel(){
        return model;
    }

這裏寫圖片描述
然後下一個攔截器是params。封裝參數
此時棧裏面有這個model對象(id;name) action對象(id;age)
如果當前請求地址是:
Xx.action?id=3&name=ab&age=20&xx=00
注意:該地址中傳過了4個參數。id,name,age,xx

那這裏的封裝參數就是把參數放到對象中,會先放到屬性中。從棧頂開始找 , 找到了就不會往下找了。當放Id的時候,會先
到model中的Id,然後就會把這個參數放到對象中。接着開始處理name。最後xx在對象中並沒有對應的屬性。則不放到棧中,但依然能用#方式取到該值。
二:取數據
此時,相當於數據中心有了數據。接下來就是我們怎麼去應用它。

Action中需要通過ActionContext對象,裏面有一個getContext,getValueStack
這裏寫圖片描述

然後在JSP中通過OGNL表達式獲取。
這裏寫圖片描述

最後,在注意一個取值順序。
這裏寫圖片描述

這樣就是整個值棧的完整過程。需要注意值棧對象的作用範圍是一個請求。

發佈了199 篇原創文章 · 獲贊 122 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章