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
總結
以上是生活随笔為你收集整理的Strus2中关于ValueStack详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《树莓派学习指南(基于Linux)》——
- 下一篇: java emoji问号,emoji-j