官术网_书友最值得收藏!

4.1 Struts 2的值棧及訪問

Struts 2框架中存儲數(shù)據(jù)的容器是ActionContext,包含著Action運行需要的對象。在該容器下,有“值棧”對象(ValueStack),它貫穿整個Action的生命周期(即每個Action類的對象實例都擁有一個ValueStack對象),在該對象內(nèi)保存當前Action對象及其他相關(guān)對象。值棧對象分為ObjectStack(對象棧)和ContextMap(Map棧)。

1.ActionContext容器及其操作

(1)ActionContext通常存儲的數(shù)據(jù)如下。

● request的parameters:請求中的參數(shù)。

● request、session和application的attribute:請求中的屬性(以Map方式存儲數(shù)據(jù))。

● 利用put方法,存放到該容器內(nèi)的屬性。

● ValueStack:值棧。OGNL在沒有特別指明的情況下,訪問的是ValueStack。

(2)ActionContext常用方法

ActionContext的常用方法如下。

● ActionContext ActionContext.getContext():使用ActionContext靜態(tài)方法獲取其容器對象。

● Object get(String key):從ActionContext中返回key對應的值。

● void put(String key, Object value):保存值到ActionContext。

● Map<String, Object>getApplication():返回ServletContext中返回的值。

● Map<String, Object>getSession():返回HttpSession的值。

● Map<String, Object>getContextMap():返回context map對象(Map棧對象)。

● Map<String, Object>getParameters():返回HttpServletRequest請求參數(shù)。

(3)在Action中訪問Web資源

Struts 2提供了ActionContext類的一個子類:ServletActionContext類,利用該類可以直接在Action中訪問Web資源。如下面的代碼所示。

    ServletContext servletContext = ServletActionContext.getServletContext(); //獲取ServletContext
    HttpServletRequest request=ServletActionContext.getRequest();  //獲取request
    HttpServletResponse response = ServletActionContext.getResponse(); //獲取response

2.Map棧

Map棧是對ActionContext的一個引用。主要存取以下對象中的數(shù)據(jù)。

● parameters:存放包含當前請求的請求參數(shù)。

● request:存放包含當前request對象中的所有屬性。

● session:存放包含當前session對象中的所有屬性。

● application:存放包含當前application對象中的所有屬性。

● attr:在Map棧中,按下列順序來檢索某個屬性的值:request、session、application。

3.對象棧

對象棧中保存著各種與當前Action實例相關(guān)的對象。

(1)ValueStack的獲取

直接由ActionContext對象的getValueStack()方法即可獲得。

(2)常用方法

● Object findValue(String expr):從該棧中查找參數(shù)expr的值。

● void setValue(String expr, Object value):以鍵-值對方式,將值保存到該棧中。

● Object pop():從棧中刪除棧頂對象。

● void push(Object o):將對象o存放到該棧的棧頂。

圖4-1給出了Struts 2中ActionContext、ValueStack、ObjectStack及ContextMap之間的關(guān)系。

圖4-1 ActionContext結(jié)構(gòu)圖

4.對值棧中數(shù)據(jù)的訪問

對值棧中的數(shù)據(jù)可以利用EL、Struts 2的ONGL等方式訪問。

(1)EL訪問格式

對于在ObjectStack中的數(shù)據(jù),其訪問格式如下。

    ${屬性名} 或者 ${對象名.屬性名}

對于在ContextMap中的數(shù)據(jù)(如request、session及application等對象中的數(shù)據(jù)),其訪問格式如下。

    ${域?qū)ο竺畬傩悦鹽 或 ${域?qū)ο竺畬ο螅畬傩悦鹽

(2)Struts 2的ONGL訪問格式

對于在ObjectStack中的數(shù)據(jù),其訪問格式如下。

    屬性名  或  對象.屬性名

對于在ContextMap中的數(shù)據(jù),其訪問格式如下。

    #屬性名   或  #對象.屬性名

若是存儲在request、session和application中的數(shù)據(jù),其訪問分別采用下列方式。

    #域?qū)ο竺畬傩悦?  或   #域?qū)ο竺畬ο螅畬傩悦?

其中域?qū)ο竺梢允莚equest、session、application和attr。其中attr按順序依次從request、session、application中查找對象或?qū)傩裕钡秸业綖橹埂?/p>

主站蜘蛛池模板: 南涧| 广水市| 邳州市| 万年县| 长武县| 朝阳市| 曲麻莱县| 乐清市| 贡嘎县| 镇平县| 南开区| 木兰县| 光山县| 石棉县| 洱源县| 海原县| 韶关市| 黑水县| 城市| SHOW| 大关县| 景洪市| 海淀区| 和平区| 韩城市| 西宁市| 雷波县| 灌阳县| 紫阳县| 益阳市| 东海县| 新沂市| 抚顺市| 都江堰市| 双辽市| 江川县| 奉化市| 甘洛县| 白山市| 孝感市| 北辰区|