ValueStack(值栈)
贯穿整个 Action 的生命周期(每个 Action 类的对象实例都拥有一个 ValueStack 对象). 相当于一个数据的中转站. 在其中保存当前 Action 对象和其他相关对象. Struts 框架把 ValueStack 对象保存在名为 “struts.valueStack” 的请求属性中
在 ValueStack 对象的内部有两个逻辑部分
1. ContextMap[Map栈]
Struts 把各种各样的映射关系(一些 Map 类型的对象) 压入 ContextMap 中. 实际上就是对 ActionContext 的一个引用
Struts 会把下面这些映射压入 ContextMap 中
parameters: 该 Map 中包含当前请求的请求参数
request: 该 Map 中包含当前 request 对象中的所有属性
session: 该 Map 中包含当前 session 对象中的所有属性
application:该 Map 中包含当前 application 对象中的所有属性
attr: 该 Map 按如下顺序来检索某个属性: request, session, application
ObjectStack[对象栈]
Struts 把Action 和相关对象压入ObjectStack 中
隐含request对象
在JSP页面用request对象:<%=request%>可以打印出此时的request对象,发现是org.apache.struts2.dispatcher.StrutsRequestWrapper@8b73a2。此类重写了getAttribute方法。此方法不再是直接从ServletRequest中获取属性,而是从值栈中获取。
<s:debug></s:debug>
通过加入struts2标签库<%@ taglib prefix="s" uri="/struts-tags" %>,可以用<s:debug></s:debug>来跟踪值栈动态。
使用 EL 访问值栈中对象的属性
<s:property value=“fieldName”> 也可以通过 JSP EL 来达到目的: ${fieldName}
原理: Struts2 将包装 HttpServletRequest 对象后的 org.apache.struts2.dispatcher.StrutsRequestWrapper 对象传到页面上, 而这个类重写了 getAttribute() 方法.
源代码解读[个人理解]
request对应的类为org.apache.struts2.dispatcher.StrutsRequestWrapper,此类是HttpServletRequestWrapper的包装类,主要作用是重写getAttribute方法。在getAttribute方法中,或到值栈中获取属性。值栈对应的类是com.opensymphony.xwork2.util.ValueStack,其具体实现为com.opensymphony.xwork2.ognl.OgnlValueStack。值栈由两个主要的属性CompoundRoot root和Map<String, Object> context。其中,root用户放置请求的交互数据,包括基本类型和对象类型等。context为值栈的上下文,用于存放parameters,request,session.application等数据。
相关推荐
1、什么是值栈 2、值栈的内部结构 3、ActionContext和ValueStatck的关系 4、如何获取值栈对象 5、向值栈存数据 6、从值栈中获取数据
Struts2 值栈的理解 Struts2 值栈是 Struts2 框架中的一种核心机制,负责存储和管理 Action 中的数据。在 Struts2 中,每个 Action 类都有一个 ValueStack 对象,该对象贯穿整个 Action 的生命周期。在 Struts2 ...
用一个小小的flash来形象的演示struts2中值栈的操作过程,非常直观!
1、 ValueStack其实就是一个放置Java对象的堆栈而已,唯一特别的是可以使用EL来获得值堆栈中对象属性的数据,并可以为值堆栈的对象属性赋值。 2、 EL,全称Express Language,即表达式语言。不要被语言吓倒,它是...
为了调试目的,可以开启Struts2的值栈调试功能,查看栈中的内容,帮助开发者了解当前请求的状态和数据流。 9. **Struts2访问Web元素** Struts2可以通过OGNL(Object-Graph Navigation Language)轻松地访问和操作...
**Value Stack:值栈** Value Stack是Struts2的核心组件,它是一个后进先出(LIFO)的数据结构,用于存储Action对象和其他可操作的数据。Value Stack的主要作用有: 1. **数据容器**:所有的Action对象都被压入...
ValueStack是Struts2框架的核心组件之一,它是一个存储ActionContext中的值的对象栈。ValueStack的主要功能是处理视图和模型之间的数据传递。在Struts2中,Action类的属性可以直接映射到JSP页面上的标签,这是因为...
struts2模拟模拟工具,可以实现action访问,我表单属性的自动封装。提供了页面显示和跌带器,利用struts2值栈(valueStack)和对象栈map栈的思想。可以用来了解struts2的执行过程,纯属个人学习
在视图层,Struts1依赖JSP标准机制绑定对象,而Struts2采用ValueStack技术,允许taglib访问值栈中的值,无需在视图和对象之间建立硬绑定,提高了代码复用性。 类型转换方面,Struts1的ActionForm属性通常是字符串,...
本总结将深入探讨Struts2的核心概念、配置、Action的创建、数据操作、值栈以及拦截器的使用,旨在帮助初学者快速上手并深入理解Struts2。 一、Struts2入门 Struts2作为Apache软件基金会的一个项目,是Struts1的升级...
Struts2 的核心组件还包括值栈(ValueStack),它是用来在控制器和视图之间传递数据的一个临时存储结构。开发者可以在Action类中将数据压入值栈,然后在JSP页面中使用OGNL(Object-Graph Navigation Language)...
此外,Struts2还支持模型驱动(ModelDriven)和值栈(ValueStack)概念,使得数据绑定变得更加简单。ModelDriven模式将Action类与业务对象关联,而值栈则提供了数据共享和存储的机制。 最后,Struts2与Spring框架的...
4. **ValueStack(值栈)**:这是一个对象栈,用于在Action和视图之间传递数据。使用OGNL(Object-Graph Navigation Language),开发者可以方便地访问和修改栈中的对象属性。 5. **Result(结果)**:结果决定了...
Struts2标签库的组成 ...数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能的标签。 流程控制标签:主要包含用于实现分支,循环等流程控制的标签。 AJAX标签:用于支持Ajax效果
- 第二种:通过ServletActionContext对象结合HttpServletRequest获取,`ValueStack valueStack2 = ServletActionContext.getValueStack(ServletActionContext.getRequest());` - 第三种:直接从HttpServletRequest...
页面绑定方面,Struts1依赖JSP标准机制,而Struts2采用ValueStack技术,允许taglib直接访问值栈中的对象,无需在视图和对象之间建立直接绑定,提高了重用性。 在类型转换上,Struts1的ActionForm属性通常是String...
在Struts2框架中,核心组件包括Action、Interceptor、Result、ValueStack等。Action是业务逻辑的执行者,Interceptor是拦截器,用于在Action执行前后进行额外的操作,如日志记录、权限检查等。Result则是Action执行...
在模型部分,Struts2支持值栈(ValueStack)的概念,这是存储Action属性和结果的地方,同时也方便了视图层的数据绑定。OGNL(Object-Graph Navigation Language)是Struts2中的默认表达式语言,用于在Action与JSP...
- **ValueStack**:用于存储Action对象和其他值,支持OGNL(Object-Graph Navigation Language)表达式,方便数据绑定。 3. **配置文件** - **struts.xml**:主要的配置文件,定义Action、结果类型、拦截器栈等。...
Struts2通过值栈(ValueStack)管理请求范围内的数据,这使得开发者能够在控制器和视图之间传递数据变得非常简单。 ##### 1. 值栈(ValueStack) - **自动注入**: 当用户提交表单时,表单的数据会被自动填充到对应的...