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进行了封装,构造了 ...
随机推荐
- Red Scarf abc171_E
题目大意 除去一个元素后的异或和 题目分析 首先异或有交换律 \(a \ \mathrm{xor} \ a=0\) \(0 \ \mathrm{xor} \ a=a\) 可以求出异或和,在异或当前元素 ...
- dos 之 for循环(小“病毒”)
需求: 1.自动在D盘下创建test2019文件夹: 2.自动在test2019下面创建100个文件,并写入"这是文件几的内容!": 3.自动打开100个CMD运行窗口(保持打开状 ...
- 读取 properties 配置文件含有中文的value内容 导致中文乱码 的解决办法
1.前言 因为装系统的时候把中文写在了系统路径,现在我想把这个路径写在properties里面来读取,可是 发现java 读取会导致中文乱码成 问号????的乱码 ,百度找了好多博客,基本都是一摸一 ...
- JAVA8-STREAM 使用说明
概述 本人在java开发过程中,有些知识点需要记录整理,我尽量严谨的叙述我学习的经过和心得,以便备份和和大家一起进步学习,此篇文章是在网上多出搜集整理验证,结尾会注明出处,今天学习一个java8新的功 ...
- RBAC: K8s基于角色的权限控制
文章目录 RBAC: K8s基于角色的权限控制 ServiceAccount.Role.RoleBinding Step 1:创建一个ServiceAccount,指定namespace Step 2 ...
- 【刷题-LeetCode】240. Search a 2D Matrix II
Search a 2D Matrix II Write an efficient algorithm that searches for a value in an m x n matrix. Thi ...
- 使用EdgyGeo Cesium工具查询下载数据集
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ EdgyGeo, Inc. 带来了一件非常棒的工作支撑架构.工程 ...
- dp问题解题思路
[基本问题单元的定义]这取决于你所查看问题的角度,找到一个划分,推进问题的角度十分重要.作者找到的方式是dp[ i ][ j ],用来表示 substring( i , j),然后站在这个角度,假设s ...
- vue学习14-自定义组件添加属性
<!DOCTYPE html> <html lang='en'> <head> <meta charset='UTF-8'> <meta http ...
- pytest文档4-fixture之conftest.py
用例1需要先登录,用例2不需要登录,用例3需要先登录.很显然这就无法用setup和teardown来实现了.fixture之conftest.py就是自定义测试用例的预置条件 1.firture相对于 ...