- Java EE框架開發(fā)技術(shù)與案例教程
- 張繼軍 董衛(wèi)
- 1011字
- 2020-05-28 14:20:34
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>
- Learn ECMAScript(Second Edition)
- Vue.js設(shè)計與實現(xiàn)
- Learning Chef
- Learning Laravel 4 Application Development
- Visual Basic程序設(shè)計
- Python深度學習原理、算法與案例
- 快速入門與進階:Creo 4·0全實例精講
- Citrix XenServer企業(yè)運維實戰(zhàn)
- 工業(yè)機器人離線編程
- Puppet:Mastering Infrastructure Automation
- Implementing Microsoft Dynamics NAV(Third Edition)
- 關(guān)系數(shù)據(jù)庫與SQL Server 2012(第3版)
- 城市信息模型平臺頂層設(shè)計與實踐
- PHP從入門到精通(第7版)
- Building E-Commerce Solutions with WooCommerce(Second Edition)