ActionContext、ValueStack、Stack Context之间的关系
2015-12-22 10:57
615 查看
转载自:http://hi.baidu.com/isina/item/d3e868c3bb80ec50bdef6981
和:/article/8083995.html
看源码你就会发现,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);
###########################################################################################################################
者之间的关系如下图所示:
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 栈上下文 也是用来存值的
个人感觉吧,action context 是在action中通过actionSupport类来获取到,主要作用是获取request之类的对象
然后valuestack和stack context都是为了使用OGNL,其中value stack 是stack context的根对象,所以我们在JSP页面中访问value stack的内容时,是不用加#,而如果是访问stack context的其他对象则要加上#。
和:/article/8083995.html
看源码你就会发现,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);
###########################################################################################################################
者之间的关系如下图所示:
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 栈上下文 也是用来存值的
个人感觉吧,action context 是在action中通过actionSupport类来获取到,主要作用是获取request之类的对象
然后valuestack和stack context都是为了使用OGNL,其中value stack 是stack context的根对象,所以我们在JSP页面中访问value stack的内容时,是不用加#,而如果是访问stack context的其他对象则要加上#。
相关文章推荐
- UIControl 纠错
- iOS UISearchController的使用
- Maya Mel GUI入门
- NSValue可以将结构转化为对象,并把它存储在集合中。
- 【译】UI设计基础(UI Design Basics)--启动与停止(Starting and Stopping)(五)
- EASYUI 表单(FORM)用法
- ios 触摸事件无法响应之UIViewController的误用
- Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 10
- Android Ui之Recycle View学习
- 一个关于NGUI的点击和按键响应的Bug
- iOS开发~UI布局(三)深入理解autolayout
- 如何让UITableview的sectionHeader随着tableview一起滑动
- iOS开发~UI布局(二)storyboard中autolayout和size class的使用详解
- UIAlertView常用属性(9.0起失效)
- iOS开发~UI布局(一)初探Size Class
- Arduino IDE for ESP8266
- 22个值得收藏的Android开源代码-UI篇
- UGUI 之 判断鼠标或者手指是否点击在UI上
- UIMenuItem
- JPQL的命名查询@NamedQuery