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这个类中有一个变量:

 Map context,

实际上调用ActionContextput,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 Contextmap):stack上下文,它包含一些列对象,包括request/session/attr/application map等。

EL:存取对象的任意属性,调用对象的方法,遍历整个对象结构图

 

======================================================================================

ActionContextAction上下文

可以得到request session application

ValueStack是值栈存放表单中的值

Stack Context 栈上下文也是用来存值的

 

=======================================================================================

你可以通过在页面中添加<s:debug/>标签察看ValueStackStack 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);

目录
相关文章
SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
这篇文章详细解释了在IntelliJ IDEA中如何使用Mute Breakpoints功能来快速跳过程序中的后续断点,并展示了如何一键清空所有设置的断点。
SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
|
5月前
|
前端开发 JavaScript Java
获取Servlet中的request.getContextPath方法详解
获取Servlet中的request.getContextPath方法详解
|
7月前
【SpringMVC】SpringMVC方式,向作用域对象共享数据(ModelAndView、Model、map、ModelMap)
【SpringMVC】SpringMVC方式,向作用域对象共享数据(ModelAndView、Model、map、ModelMap)
70 1
|
Java 开发者
Valuestack | 学习笔记
快速学习 Valuestack,介绍了 Valuestack 系统机制, 以及在实际应用过程中如何使用。
Valuestack | 学习笔记
|
Java 开发者
ActionContext、ValueStack、OGNL | 学习笔记
快速学习 ActionContext、ValueStack、OGNL 代理,介绍了 ActionContext、ValueStack、OGNL 系统机制, 以及在实际应用过程中如何使用。
JavaWeb - request 对象中 getContextPath() 方法介绍
JavaWeb - request 对象中 getContextPath() 方法介绍
181 0
JavaWeb - request 对象中 getContextPath() 方法介绍
Struts2中:值栈(ValueStack)、值栈中的Action实例、Struts2中的其他命名对象 小结
值栈(ValueStack)        Struts2将OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是OgnlContext),并将值栈设为OGNL的根对象。
1549 0