Strus2中关于ValueStack详解
什么是ValueStack
它是一個接口com.opensymphony.xwork2.util.ValueStack。我們使用它是將其做為一個容器,用于攜帶action數(shù)據(jù)到頁面。在頁面上通過ognl表達(dá)式獲取數(shù)據(jù)。?
valueStack主要是將action數(shù)據(jù)攜帶到頁面上,通過ognl獲取數(shù)據(jù)
1.ValueStack有一個實現(xiàn)類叫OgnlValueStack.?
2.每一個action都有一個ValueStack.(一個請求,一個request,一個action,一個valueStack) valueStack生命周期就是request生命周期。?
3.valueStack中存儲了當(dāng)前action對象以及其它常用web對象(request,session,application.parameters)?
4.struts2框架將valueStack以“struts.valueStack”為名存儲到request域中。
valueStack結(jié)構(gòu)
?
ValueStack中 存在root屬性 (CompoundRoot) 、 context 屬性 (OgnlContext )!并且context中含有root?
* CompoundRoot 就是ArrayList?
* OgnlContext 就是 Map
list集合中存儲的是action相關(guān)信息?
map集合中存儲的是相關(guān)映射信息,包含 paramters,request,session,application attr等。
我們想要從list中獲取數(shù)據(jù),可以不使用#號.(它就是ognl的root)?
如果從map中獲取數(shù)據(jù),需要使用#. (其實在struts2中的map–context其實就是ognlContext)
結(jié)論:?
ValueStack它有兩部分 List Map?
在struts2中List就是root Map就是ognlContext.?
默認(rèn)情況下,在struts2中從valueStack獲取數(shù)據(jù)從root中獲取。
值棧對象的創(chuàng)建 ,ValueStack 和 ActionContext 是什么關(guān)系 ?
valueStack是每一次請求時,都會創(chuàng)建.
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();向值棧保存數(shù)據(jù) (主要針對 root)
主要有兩個方法?
push(Object obj)——->底層就是 root.add(0,obj) 將數(shù)據(jù)存儲到棧頂。?
set(String name,Object obj);—–>底層是將數(shù)據(jù)封裝到HashMap中,在將這個HashMap通過push存儲。
在jsp中 通過?<s:debug />?查看值棧的內(nèi)容
在JSP中獲取值棧的數(shù)據(jù)
root中數(shù)據(jù)不需要#,而context中數(shù)據(jù)需要#
1.如果棧頂是一個Map集合,獲取時,可以直接通過Map集合的key來獲取value.
<s:property value="username"/>2.如果棧頂數(shù)據(jù)不是一個Map,沒有key值,可以使用序號來獲取。
<s:property value="[0]"> 從0的位置向下查找所有。<s:property value="[0].top"> 只查找0位置上數(shù)據(jù)。如何獲取OgnlContext中數(shù)據(jù):?
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]"/>
轉(zhuǎn)載于:https://www.cnblogs.com/xtdxs/p/6527380.html
總結(jié)
以上是生活随笔為你收集整理的Strus2中关于ValueStack详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 《树莓派学习指南(基于Linux)》——
- 下一篇: mysql 异步 同步 不支持,Mysq
