Strus2中關于ValueStack詳解

什么是ValueStack

它是一個接口com.opensymphony.xwork2.util.ValueStack。我們使用它是將其做為一個容器,用于攜帶action數據到頁面。在頁面上通過ognl表達式獲取數據。?
valueStack主要是將action數據攜帶到頁面上,通過ognl獲取數據

1.ValueStack有一個實現類叫OgnlValueStack.?
2.每一個action都有一個ValueStack.(一個請求,一個request,一個action,一個valueStack) valueStack生命周期就是request生命周期。?
3.valueStack中存儲了當前action對象以及其它常用web對象(request,session,application.parameters)?
4.struts2框架將valueStack以“struts.valueStack”為名存儲到request域中。

valueStack結構

這里寫圖片描述?
ValueStack中 存在root屬性 (CompoundRoot) 、 context 屬性 (OgnlContext )!并且context中含有root?
* CompoundRoot 就是ArrayList?
* OgnlContext 就是 Map

list集合中存儲的是action相關信息?
map集合中存儲的是相關映射信息,包含 paramters,request,session,application attr等。

我們想要從list中獲取數據,可以不使用#號.(它就是ognl的root)?
如果從map中獲取數據,需要使用#. (其實在struts2中的map–context其實就是ognlContext)

結論:?
ValueStack它有兩部分 List Map?
在struts2中List就是root Map就是ognlContext.?
默認情況下,在struts2中從valueStack獲取數據從root中獲取。

值棧對象的創建 ,ValueStack 和 ActionContext 是什么關系 ?

valueStack是每一次請求時,都會創建.

ActionContext ctx = ActionContext.getContext();
if (ctx != null) { stack = ctx.getValueStack(); }
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

如何獲得值棧對象?

對于valueStack獲取有兩種方式:

1.通過 request獲取

ValueStack vs=(ValueStack) ServletActionContext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);

2.通過ActionContext獲取.

ValueStack vs=ActionContext.getContext().getValueStack();

向值棧保存數據 (主要針對 root)

主要有兩個方法?
push(Object obj)——->底層就是 root.add(0,obj) 將數據存儲到棧頂。?
set(String name,Object obj);—–>底層是將數據封裝到HashMap中,在將這個HashMap通過push存儲。

在jsp中 通過?<s:debug />?查看值棧的內容

在JSP中獲取值棧的數據

root中數據不需要#,而context中數據需要#

1.如果棧頂是一個Map集合,獲取時,可以直接通過Map集合的key來獲取value.

<s:property  value="username"/>

2.如果棧頂數據不是一個Map,沒有key值,可以使用序號來獲取。

<s:property value="[0]">  從0的位置向下查找所有。<s:property value="[0].top"> 只查找0位置上數據。

如何獲取OgnlContext中數據:?
request:?<s:property value="#request.username"/>?
session:?<s:property value="#session.username"/>?
application:<s:property value="#application.username"/>?
attr:?<s:property value="#attr.username"/>?
parameters:<s:property value="#parameters.cid[0]"/>

轉載于:https://www.cnblogs.com/xtdxs/p/6527380.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457034.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457034.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457034.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Airbnb React/JSX 編碼規范

Airbnb React/JSX 編碼規范算是最合理的React/JSX編碼規范之一了內容目錄基本規范Class vs React.createClass vs stateless命名聲明模塊代碼對齊單引號還是雙引號空格屬性Refs引用括號標簽函數/方法模塊生命周期isMountedBasic Rules 基本規范每個文件只寫一個模塊.但是多個無…

Mysql數據庫使用總結

mysql數據庫使用總結 本文主要記錄一些mysql日常使用的命令&#xff0c;供以后查詢。 1.更改root密碼 mysqladmin -uroot password yourpassword 2.遠程登陸mysql服務器 mysql -uroot -p -h192.168.137.10 -P3306 3.查詢數據庫 show databases; 4.進入某個數據庫 use databa…

c語言遞歸漢諾塔次數,漢諾塔問題(C語言經典遞歸問題(一))

把A桿上的金盤全部移到C桿上&#xff0c;并仍保持原有順序疊好。操作規則&#xff1a;每次只能移動一個盤子&#xff0c;并且在移動過程中三根桿上都始終保持大盤在下&#xff0c;小盤在上&#xff0c;操作過程中盤子可以置于A、B、C任一桿上。思路&#xff1a;圖解&#xff1a…

Eclipes導入的項目中的中文都是亂碼的解決辦法

把項目導入Eclipse時&#xff0c;里邊的中文全是亂碼&#xff0c;試了很多方法&#xff0c;最終總結一下&#xff01; eclipse之所以會出現亂碼問題是因為eclipse編輯器選擇的編碼規則是可變的。一般默認都是UTF-8或者GBK&#xff0c;當從外部導入的一個工程時&#xff0c;如果…

理解瀏覽器是如何加載及渲染網頁的

先上圖&#xff0c;我們再慢慢解釋&#xff0c;這圖就是瀏覽器加載網頁的一個過程 當我們在瀏覽器輸入一個地址&#xff08;比如:http://toadw.cn&#xff09;,那么點擊回車后&#xff0c;瀏覽器是如何加載網頁的呢&#xff1f; 加載過程 一開始瀏覽器是不知道你輸入的http://t…

CentOS下的Mysql的安裝和使用

1.使用安裝命令 &#xff1a;yum -y install mysql mysql-server mysql-devel 安裝完成卻發現Myserver安裝缺失&#xff0c;在網上找原因&#xff0c;原來是因為CentOS 7上把MySQL從默認軟件列表中移除了&#xff0c;用MariaDB來代替&#xff0c;所以這導致我們必須要去官網上…

NOIP模擬題——神秘大門

【題目描述】最近小K大牛經過調查發現&#xff0c;在WZland的最南方——WZ Antarctica 出現了奇怪的磁場反應。為了弄清楚這一現象&#xff0c;小K 大牛親自出馬&#xff0c;來到了WZ Antarctica。小K大牛發現WZ Antarctica 出現了一道神秘的大門。人總有好奇心&#xff0c;小K…

大學c語言程序設計大賽,關于舉辦寧夏大學第二屆C語言程序設計大賽的通知

各學院&#xff1a;根據學校《關于進一步加強基礎課教學改革的意見》(寧大校發〔2008〕178號)、《關于加強學生創新精神和創新能力培養的實施意見》(寧大校發〔2008〕75號)的有關文件精神&#xff0c;經研究決定舉辦寧夏大學第二屆C語言程序設計大賽&#xff0c;從中選拔出優秀…

Android中創建自己的對話框

Activities提供了一種方便管理的創建、保存、回復的對話框機制&#xff0c;例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法&#xff0c;如果使用這些方法的話&#xff0c;Activity將通過getOwnerActivity()方法返回該Act…

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11

搭建Django2.0Python3MySQL5時同步數據庫時報錯&#xff1a; django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None 解決辦法&#xff1a; 找到Python安裝路勁下的Python36-32\Lib\site-packages\django\db\backend…

一件很好笑的事情

我是一個比較習慣努力學習的人&#xff0c; 我也會去學習各種可能與我有交集的知識&#xff0c; 就在這幾天&#xff0c;我看到以前的一個android網絡培訓學校開辦了C/C的培訓&#xff0c;這是挺好的事&#xff0c; 但是看他們的文件&#xff0c;我就奇怪了。 這份文件&#xf…

c語言實現循環鏈表,c語言實現循環鏈表的基本操作

循環鏈表和單鏈表其實區別不大,差別僅在于算法中的循環條件不是p或者p->next,而是是否等于頭指針。下面這個例子簡單的實現了循環鏈表的基本操作,其中插入和刪除只是完成了主要的部分,沒有判斷。#include#includestruct Data{char name;int age;};struct CirList{Data *data…

關于Eclipes的Logcat無法打印消息的解決辦法

轉自&#xff1a;http://blog.csdn.net/harry211/article/details/8453532 調試程序需要打印一些消息出來&#xff0c;logcat不好用的話就很麻煩了。這個問題折騰了好久&#xff0c;為啥就是不出來呢&#xff1f; 上網找了很多解決辦法&#xff1a; 重啟eclipse 重啟adb 重啟…

17:文字排版

17:文字排版 查看提交統計提問總時間限制: 1000ms內存限制: 65536kB描述給一段英文短文&#xff0c;單詞之間以空格分隔&#xff08;每個單詞包括其前后緊鄰的標點符號&#xff09;。請將短文重新排版&#xff0c;要求如下&#xff1a; 每行不超過80個字符&#xff1b;每個單詞…

解決AttributeError: 'str' object has no attribute 'decode'報錯問題

順著報錯文件點進去&#xff0c;找到query query.decode(errors‘replace’) 將decode修改為encode即可

c語言指針數組課件,C語言指針與數組教程課件.ppt

C語言指針與數組教程;教學要求;本章主要內容;引子;#include void swap ( int x, int y ) { printf("調用時&#xff1a;x地址為&#xff1a;%p, 值為&#xff1a;%d\n",&x,x); printf("調用時&#xff1a;y地址為&#xff1a;%p, 值為&#xff1a;%d\n"…

Android控制EditText的焦點

在項目中&#xff0c;一進入一個頁面, EditText默認就會自動獲取焦點。 那么如何取消這個默認行為呢&#xff1f; 在網上找了好久&#xff0c;有點 監聽軟鍵盤事件&#xff0c;有點 調用 clearFouse()方法&#xff0c;但是測試了都沒有&#xff01; xml中也找不到相應的屬性可以…

解決python中html 代碼被注釋掉 依舊被解釋導致報錯ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx)

ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx) 注釋的是Html代碼&#xff0c;是給瀏覽器看的。 Html里的代碼還是要執行。注釋python代碼用{# #}

springMvc 傳子 bean 中有bean

2019獨角獸企業重金招聘Python工程師標準>>> bean 類型 如下 1. json 字符串 $.ajax({ url :${ctx}/test/testData/f1?bookjava, type: post, dataType : "json", con…

通過rsync搭建一個遠程備份系統(二)

Rsyncinotify實時備份數據 rsync在同步數據的時候&#xff0c;需要掃描所有文件后進行對比&#xff0c;然后進行差量傳輸&#xff0c;如果文件達到了百萬或者千萬級別以上是&#xff0c;掃描文件的時間也很長&#xff0c;而如果只有少量的文件變更了&#xff0c;那么此時rsync是…