在方法
<action name="zilei" class="dtreeAction" method="zilei">
<result name="listzilei" >/zilei.jsp</result>
<result name="input">/error.jsp</result>
</action>
ActionContext.getContext().getValueStack().set("listzilei", listzilei);
取值:
<s:property value="%{#request.listzilei}"/>
<s:property value="#request.listzilei"/>
<s:property value="listzilei"/>
<s:property value="#attr.listzilei"/>
<%=request.getAttribute("listzilei") %>
${listzilei}
<s:iterator value="#request.listzilei" id="dtree">
都可以取到值。
当保存在contextMap中时:
ActionContext.getContext().getContextMap().put("listzilei", listzilei);
取值:用
<s:property value="listzilei"/>不行
<s:property value="#session.listzilei"/>不行
<s:property value="#params.listzilei"/>不行
下面都可以取到值:
<s:property value="%{#request.listzilei}"/>
<s:property value="#request.listzilei"/>
<s:property value="#attr.listzilei"/>
<%=request.getAttribute("listzilei") %>
${listzilei}
3:直接用request.setAttribute()
request.setAttribute("listzilei", listzilei);
<s:property value="%{#request.listzilei}"/>
*
<s:property value="#request.listzilei"/>
**
<s:property value="listzilei"/>只有这个不行
***
<s:property value="#attr.listzilei"/>
****
<%=request.getAttribute("listzilei") %>
*****
${listzilei}
4,Maprequest:
Map request1 = (Map) ActionContext.getContext().get("request");
request1.put("listzilei", listzilei);
<s:property value="%{#request.listzilei}"/>
*
<s:property value="#request.listzilei"/>
**
<s:property value="listzilei"/>不行
***
<s:property value="#attr.listzilei"/>
****
<%=request.getAttribute("listzilei") %>
*****
${listzilei}
******
总结:说明getContextMap取值的范围比valueStack大一点。只保存在request的attribute中。而ContextMap与手动request.setAtribute()及Map request是一样的。
struts2,a页面url传值,,再执行方法,再到b页面,a.jsp?id=33,在b.jsp页面都可以取到值。
方法中采用
<action name="delete1" class="dtreeAction" method="delete1">
<result type="redirect-action" name="success">
<param name="actionName">zilei1.action</param>
<param name="id">${id}</param>
</result>
</action>
<s:property value="%{#request.id}"/>
*
<s:property value="#request.id"/>
**
<s:property value="id"/>不行
***
<s:property value="#attr.id"/>
****
<%=request.getAttribute("id") %>
*****
${id}
点击b页面的删除再回到b页面,什么都没有。
当struts.xml中用${id}时:
//request.setAttribute("id", id);不行
//ActionContext.getContext().getValueStack().set("id", id);可以
//ActionContext就是ognl上下文,是整个上下文最大的一个。e
//ActionContext.getContext().getContextMap().put("id", id);可以
//request1.put("id", id);不行
当struts.xml中用${request.id}时:
request.setAttribute("id", id);可以
ActionContext.getContext().getValueStack().set("id", id);可以
ActionContext就是ognl上下文,是整个上下文最大的一个。e
ActionContext.getContext().getContextMap().put("id", id);可以
request1.put("id", id);可以
都可以的。
总结:ContextMap在struts.xml文件中可以取到值。用valuestack无法取到值
OgnlValueStack类包含两个重要的属性,一个root和一个context。其中root本质上是一个ArrayList,而context是一个Map(更确切的说是一个OgnlContext对象)。
也就是说:Map的范围更大,所以不带#有事就取不到。一条竖着的都是map类型
OgnlValueStack类的主要属性关系图如下:
|
|--application
|
|--session
context map (OgnlValueStack属性)--|
|--value stack (OgnlValueStack的root属性,实际是个ArrayList)
|
|--request
|
|--parameters
|
|--attr (searches page, request, session, then application scopes)
OgnlValueStack是ActionContext的基础
暂时就把ContextMap和valueStack当成一样就行了,在.xml文件中有区别
转至:http://blog.csdn.net/chenjian198819/article/details/6643448
分享到:
相关推荐
ValueStack是Struts2框架中的核心组件之一,它是ActionContext和ActionInvocation之间的一个数据传递层,负责在Action与视图之间传递和管理数据。ValueStack的作用在于简化模型-视图-控制器(MVC)架构中的数据交互...
【在线培训:ValueStack】是一场深入探讨Java开发中ValueStack特性和应用的专题讲座。在本次培训中,参与者将全面了解栈数据结构的基础知识,以及在Struts2框架中ValueStack的重要角色。以下是详细的知识点讲解: 1...
关于ValueStack的描述: 1、 ValueStack其实就是一个放置Java对象的堆栈而已,唯一特别的是可以使用EL来获得值堆栈中对象属性的数据,并可以为值堆栈的对象属性赋值。 2、 EL,全称Express Language,即表达式...
2. **ActionContext**:与ValueStack密切相关的是ActionContext,它包含了当前请求的上下文信息,包括ValueStack、Session、Request和Application等数据。 3. **动作方法与结果转发**:Action类中定义的方法通常对应...
深入讲解Struts中的ognl和valueStack
OGNL(Object-Graph Navigation Language)是一种基于 Java 的表达式语言,Struts2 框架中使用 OGNL 来访问和操作 ValueStack 中的对象。在 Struts2 中,OGNL 是一个强大的工具,允许开发者访问和操作 ValueStack 中...
Struts是Java Web开发中的一个开源框架,它主要用于构建基于MVC(Model-View-Controller)模式的应用程序。在Struts中,OGNL(Object-Graph Navigation Language)和Value Stack(VS)是两个核心概念,它们对于理解...
通过上述介绍可以看出,在Struts2框架中,`ValueStack`与`ActionContext`在实现Action与视图层之间的数据传递方面起着至关重要的作用。了解并掌握这两种工具的使用方法,可以帮助开发者更加高效地开发基于Struts2的...
在Struts2中,每个Action实例都有一个与之关联的ValueStack对象,该对象贯穿整个Action的生命周期。ValueStack不仅包含了Action对象本身,还可能包含其他辅助对象或数据,比如表单数据、验证错误等。 #### 获取...
1、什么是值栈 2、值栈的内部结构 3、ActionContext和ValueStatck的关系 4、如何获取值栈对象 5、向值栈存数据 6、从值栈中获取数据
ValueStack 对象在 Struts2 中扮演着非常重要的角色,它将属性值从一个拦截器传到了另一个拦截器(当然,在这其间,属性值可能改变),最后会传到 Action 对象,并将 ValueStack 对象中的属性的值终值赋给 Action 类...
它通过声明与请求参数同名的属性,能够在执行Action方法之前自动获取请求参数的值。这是通过Struts2的内建机制实现的,其中ValueStack对象起着至关重要的作用。ValueStack是一个数据结构,它像一个栈一样,用于存储...
而在控制器层,Action类的属性可以通过ActionContext的ValueStack与HTTP请求参数进行绑定,或者在Action的执行过程中,使用OGNL进行数据的读写和计算。 总的来说,ActionContext是Struts2框架处理请求上下文的核心...
ActionContext提供了在Action、Servlet、ValueStack以及其他的Struts2组件之间传递数据的桥梁。在这个“JavaEE ActionContext存取数据示例”中,我们将深入探讨ActionContext的使用方法及其与OGNL(Object-Graph ...
综上所述,OGNL是Struts2框架中的一个重要组成部分,它不仅提供了强大的表达式语言功能,还与框架的核心机制(如ValueStack)紧密结合,使得开发者能够更高效地处理对象之间的导航和访问。通过深入理解OGNL的工作...
- 第三种:直接从HttpServletRequest对象的属性中获取,`ValueStack valueStack3 = ServletActionContext.getRequest().getAttribute("struts.valueStack");` 4. **值栈的结构**: 值栈实际上是一个OgnlContext的...
5. **ValueStack与Ognl**:ValueStack是Struts2中用于数据传递的机制,而OGNL(Object-Graph Navigation Language)是Struts2的默认表达式语言,用于访问和操作ValueStack中的对象。这部分源码解析会介绍ValueStack...
例如,研究`ActionSupport`类如何与ActionContext交互,或者查看`ValueStack`如何管理栈中的对象。此外,开发工具如IDE的调试功能,可以帮助我们跟踪代码执行流程,直观地看到数据在不同范围间的传递过程。 总结来...
Action类是业务逻辑的载体,与ValueStack交互。 3. **配置Struts2的配置文件**:在`struts.xml`或`struts.properties`中,定义Action的映射,包括结果类型、方法名和对应的JSP页面。 4. **编写JSP页面**:使用`s`...