`
sd8089730
  • 浏览: 258602 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

ValueStack与ContentMap

 
阅读更多
在方法

<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使用参考

    ValueStack是Struts2框架中的核心组件之一,它是ActionContext和ActionInvocation之间的一个数据传递层,负责在Action与视图之间传递和管理数据。ValueStack的作用在于简化模型-视图-控制器(MVC)架构中的数据交互...

    在线培训:ValueStack

    【在线培训:ValueStack】是一场深入探讨Java开发中ValueStack特性和应用的专题讲座。在本次培训中,参与者将全面了解栈数据结构的基础知识,以及在Struts2框架中ValueStack的重要角色。以下是详细的知识点讲解: 1...

    Struts2中关于ValueStack的一些操作

    关于ValueStack的描述: 1、 ValueStack其实就是一个放置Java对象的堆栈而已,唯一特别的是可以使用EL来获得值堆栈中对象属性的数据,并可以为值堆栈的对象属性赋值。 2、 EL,全称Express Language,即表达式...

    s20505_valueStack_OGNL

    2. **ActionContext**:与ValueStack密切相关的是ActionContext,它包含了当前请求的上下文信息,包括ValueStack、Session、Request和Application等数据。 3. **动作方法与结果转发**:Action类中定义的方法通常对应...

    Struts中的ognl和valueStack

    深入讲解Struts中的ognl和valueStack

    很全面的struts2_ognl总结

    OGNL(Object-Graph Navigation Language)是一种基于 Java 的表达式语言,Struts2 框架中使用 OGNL 来访问和操作 ValueStack 中的对象。在 Struts2 中,OGNL 是一个强大的工具,允许开发者访问和操作 ValueStack 中...

    Struts用的ognl和valueStack(vs)实例

    Struts是Java Web开发中的一个开源框架,它主要用于构建基于MVC(Model-View-Controller)模式的应用程序。在Struts中,OGNL(Object-Graph Navigation Language)和Value Stack(VS)是两个核心概念,它们对于理解...

    struts学习笔记(3)

    通过上述介绍可以看出,在Struts2框架中,`ValueStack`与`ActionContext`在实现Action与视图层之间的数据传递方面起着至关重要的作用。了解并掌握这两种工具的使用方法,可以帮助开发者更加高效地开发基于Struts2的...

    struts2框架面试题及答案02

    在Struts2中,每个Action实例都有一个与之关联的ValueStack对象,该对象贯穿整个Action的生命周期。ValueStack不仅包含了Action对象本身,还可能包含其他辅助对象或数据,比如表单数据、验证错误等。 #### 获取...

    linjin101#javaStudy#Struts2中的OGNL和值栈ValueStack1

    1、什么是值栈 2、值栈的内部结构 3、ActionContext和ValueStatck的关系 4、如何获取值栈对象 5、向值栈存数据 6、从值栈中获取数据

    Struts2值栈的理解

    ValueStack 对象在 Struts2 中扮演着非常重要的角色,它将属性值从一个拦截器传到了另一个拦截器(当然,在这其间,属性值可能改变),最后会传到 Action 对象,并将 ValueStack 对象中的属性的值终值赋给 Action 类...

    浅谈Strut2如何对请求参数的封装

    它通过声明与请求参数同名的属性,能够在执行Action方法之前自动获取请求参数的值。这是通过Struts2的内建机制实现的,其中ValueStack对象起着至关重要的作用。ValueStack是一个数据结构,它像一个栈一样,用于存储...

    struts2中的ActionContext与ognl

    而在控制器层,Action类的属性可以通过ActionContext的ValueStack与HTTP请求参数进行绑定,或者在Action的执行过程中,使用OGNL进行数据的读写和计算。 总的来说,ActionContext是Struts2框架处理请求上下文的核心...

    JavaEE ActionContext存取数据示例

    ActionContext提供了在Action、Servlet、ValueStack以及其他的Struts2组件之间传递数据的桥梁。在这个“JavaEE ActionContext存取数据示例”中,我们将深入探讨ActionContext的使用方法及其与OGNL(Object-Graph ...

    传智168期JavaEE struts2杜宏 day32~day33笔记

    综上所述,OGNL是Struts2框架中的一个重要组成部分,它不仅提供了强大的表达式语言功能,还与框架的核心机制(如ValueStack)紧密结合,使得开发者能够更高效地处理对象之间的导航和访问。通过深入理解OGNL的工作...

    赵栋struts2 笔记

    - 第三种:直接从HttpServletRequest对象的属性中获取,`ValueStack valueStack3 = ServletActionContext.getRequest().getAttribute("struts.valueStack");` 4. **值栈的结构**: 值栈实际上是一个OgnlContext的...

    Struts2源代码与源码解析文档

    5. **ValueStack与Ognl**:ValueStack是Struts2中用于数据传递的机制,而OGNL(Object-Graph Navigation Language)是Struts2的默认表达式语言,用于访问和操作ValueStack中的对象。这部分源码解析会介绍ValueStack...

    Struts2访问request,session,application的四种方式

    例如,研究`ActionSupport`类如何与ActionContext交互,或者查看`ValueStack`如何管理栈中的对象。此外,开发工具如IDE的调试功能,可以帮助我们跟踪代码执行流程,直观地看到数据在不同范围间的传递过程。 总结来...

    第一个struts2

    Action类是业务逻辑的载体,与ValueStack交互。 3. **配置Struts2的配置文件**:在`struts.xml`或`struts.properties`中,定义Action的映射,包括结果类型、方法名和对应的JSP页面。 4. **编写JSP页面**:使用`s`...

Global site tag (gtag.js) - Google Analytics