ActionContext_、ValueStack、Stack_Context关系
看源碼你就會發現,ActionContext這個類中有一個變量:
?Map context,
實際上調用ActionContext的put,get就相當于調用context的相就方法,你在頁面上通過獲取的就相當于調用context.get("request"),context.get("attr"),而你通過ac.put("list", List)也只能通過ac.get("list")獲得。
而ActionContext.getValueStack()相當于調用context.get(OgnlValueStack.VALUE_STACK)所獲取的與通過ActionContext.get("request")獲取的是不一樣的東西
?
===============================================================================
ActionContext
一次Action調用都會創建一個ActionContext
調用:ActionContext context = ActionContext.getContext()
?
ValueStack
由OGNL框架實現
可以把它簡單的看作一個List
?
?
Stack Object:放入stack中的對象,一般是action。
Stack Context(map):stack上下文,它包含一些列對象,包括request/session/attr/application map等。
EL:存取對象的任意屬性,調用對象的方法,遍歷整個對象結構圖
?
======================================================================================
ActionContext是Action上下文
可以得到request session application
ValueStack是值棧存放表單中的值
Stack Context 棧上下文也是用來存值的
?
=======================================================================================
你可以通過在頁面中添加<s:debug/>標簽察看ValueStack和Stack Context中有哪些具體的內容。ValueStack里面的東西先入后出,很多沒有id的元素使用完之后就退棧了。
StackContext提供了一些命名對象,這些命名對象與根對象無關,訪問這些對象需要使用#前綴指名。比如這里面存在:parameters對象,request對象, session對象,application對象等等。
?
======================================================================================
value stack contents ognl 值棧
stack context action上下文
?
action上下文是一個map對象,通過#key獲得對象內容,在#request又可以得到值棧,值棧里存儲的是一些action里的變量
于是獲得action變量內容有三種方式
1,從值棧中直接獲得
<s:property value="type"/>
${type }
2,從action上下文獲得值棧的屬性
<s:property value="#request['type']"/>或者<s:property value="#request.type"/>
?
======================================================================================
1) ValueStack可以用 request.getAttribute("struts.valueStack")取得的一個 com.opensymphony.xwork2.util.OgnlValueStack實例,它實現為一個棧,有 peek()、pop()、push(obj)方法。
?
2) Stack Context是在前面的 ValueStack的上下中的一個 java.util.Stack實例:
//stack 為 ValueStack實例,COMPONENT_STACK="__component_stack"
// org.apache.struts2.components.Component.getComponentStack()中的代碼
Stack componentStack = (Stack) stack.getContext().get(COMPONENT_STACK);
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的ActionContext_、ValueStack、Stack_Context关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多份保险能重复赔偿吗
- 下一篇: 2018年iPhone新机有哪些亮点 软