ValueStack与ContentMap (ActionContext.getContext().getValueStack().set())
在方法
<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文件中有区别
ValueStack与ContentMap (ActionContext.getContext().getValueStack().set())的更多相关文章
- struts2中valueStack,stackContext以及actionContext的关系
一,首先给出三者的定义 1.valueStack: 里面存放的是Action类中通过set方法设置的属性值(表单传过来的值等),由OGNL框架实现; 2.stackContext: 也是用来存值的,s ...
- ActionContext.getContext().getSession()
ActionContext.getContext().getSession() 获取的是session,然后用put存入相应的值,只要在session有效状态下,这个值一直可用 ActionConte ...
- 关于ActionContext.getContext()的用法心得
转: 为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2对HttpServletRequest.HttpSession和ServletContext进行了封装, ...
- 关于ActionContext.getContext()的用法
为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2对HttpServletRequest.HttpSession和ServletContext进行了封装,构造了 ...
- 【转载】关于ActionContext.getContext().getParameters()获值问题
ActionContext.getContext().getParameters():一个学员问题的解答 2012-11-12 15:12:05| 分类: 默认分类 | 标签:struts2 ...
- <s:if>标签与ActionContext.getContext().getSession()
今天在做<s:if>标签中的属性值从 ActionContext.getContext().getSession().put("WW_TRANS_I18N_LOCALE" ...
- 关于ActionContext.getContext()的使用方法心得
这个也是我在另外一位仁兄的博客中看到的,原博客的有点长,我把它精简了一下,算看起来比較方便吧. 为了避免与Servlet API耦合在一起,方便Action类做单元測试,Struts 2对HttpSe ...
- 大约ActionContext.getContext()使用体验
这是我在另一个人的博客看了,原来博客的时间长一点.我把它简化了一下,运营商,以方便它看起来. 为了避免与Servlet API耦合在一起,方便Action类做单元測试,Struts 2对HttpSer ...
- ActionContext.getContext()用法
为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2对HttpServletRequest.HttpSession和ServletContext进行了封装,构造了 ...
随机推荐
- SpringBoot集成log4j,解决log4j.properties不生效问题
Spring Boot集成log4j其实比较简单,maven的话,在xml中增加log4j依赖就行 <dependency> <groupId>org.springframew ...
- [学习笔记] SpringBoot 之 Helloworld
创建项目 IDEA / File / New / Project / Spring Initalizr / Next Group: com.wu 公司官网域名反写 Artifact: hellowor ...
- 『无为则无心』Python函数 — 33、高阶函数
目录 1.高阶函数的定义 2.体验高阶函数 3.内置高阶函数 (1)map()函数 (2)reduce()函数 (3)filter()函数 1.高阶函数的定义 把函数作为参数传入(把一个函数作为另外一 ...
- STM32时钟系统的配置寄存器和源码分析
一.时钟系统 概述 时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令,时钟系统就是CPU的脉搏,决定cpu速率. STM32有多个时钟来源的选择,为什么 STM32 要有多个时钟源呢 ...
- 我踩过的Django的坑
把自己在使用Django过程中吃过的亏 踩过的坑 记录一下 1. unique_together传的是元组 正确:unique_together = (('app_id', 'module_id', ...
- Python中*args 和**kwargs作为形参和实参时的功能详解
*args 和**kwargs作为形参 *args 和**kwargs作为形参被称为不定长参数,用来处理超出必备参数部分的参数.注意:args和kwargs可以修改为其它变量名. 必备参数就是在定义函 ...
- Go语言系列之网络编程
现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其实是一个很庞大的领域,本 ...
- Leetcode系列之两数之和
Leetcode系列之两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,你 ...
- PowerPoint2010实现折线图动态展示
原文链接:https://www.toutiao.com/i6797629648881582596/ 我们经常会制作折线图表来表达一个过程的趋势变化,而如果让折线图动起来,会更加的生动.接下来我们将一 ...
- 一站式搭建 GitHub Pages 博客 (一)
本文将详细讲解如何快速搭建 GitHub Pages 博客页面 关于博客主题,博客信息更改,上传文章等将会在 一站式搭建 GitHub Pages 博客 (二) 中进行详细讲解 准备阶段 注册 Git ...