Struts2 的 值栈和ActionContext
1、ValueStack 和 ActionContext 的关系与区别:
-- 相同点:它们都是在一次HTTP请求的范围内使用的,它们的生命周期都是一次请求
-- 不同点:ValueStack 分为对象栈(Object Stack) 和 Map栈(Map Context),而ActionContext就是一个映射的Map结构
-- 联系 : ValueStack.getContext()方法得到的Map 其实就是ActionContext 的Map。在查看Struts2的源代码可知(Struts2.3.1.2的org.apache.struts2.dispatcher.ng.PrepareOperations的第79行,createActionContext方法),在创建ActionContext的时候,就是把ValueStack.getContext()作为ActionContext的构造函数的参数,而Aaction中,可以通过 Action.getContext().getValueStack()方法获取ValueStack对象。所以本质上,这两个对象是可以相互获得的。
-- 有关于VauleStack,可以通过下图基本了解:
2、ValueStack:由上图可知ValueStack是由 Map栈 和 对象栈 组成的。ValueStack的基础是ONGL,要想了解ValueStack,必须理解OGNL(Object Graphic Navigatino Language)。OGNL是Struts2中使用的一种表达式语言,它可以使用Jsp标签库,以便可以访问各种对象的属性,它用于页面将参数传递到Action中(并进行类型转换)。OGNL这里就不介绍了。下篇随笔会介绍
--> Map栈 : 实际上是OgnlContext类型,是个Map,也是 ActionContext的一个引用,里面包括 requestMap,sessionMap,applicationMap,parameterMap,attr
--> 对象栈 : 实际上是CompoundRoot类型,是一个使用ArrayList定义的栈,里面保存着各种和当前Action实例相关的对象。是一个数据结构意义的栈
3、在Jsp页面上可以通过OGNL(Object Graphic Navigatino Language 对象-图导航语言)来直接访问值栈(ValueStack)里的对象属性。若想访问Object Stack的某个对象的属性。可以使用以下几种形式
--> object.propertyName 、object['propertyName']、object["propertyName"]
--> Object Stack 里的对象可以通过一个从零开始的下标来引用,Object Stack 里的栈前对象可以用[0]来引用,它下面的对象可以用[1]引用 [0].message
--> [n]的含义是从第N个元素开始搜索,不是只搜索第N个对象
--> 若是从栈顶开始搜索 [0]是可以省略的,直接写出message
--> 结合 s:property 标签 :如果又下标的情况下可以使用 <s:property value=[0].message"/> 等同于 <s:property value=message"/>
--> 若是访问的是对象栈中的数据 <s:property value="object.columnName"/> 或 <s:property value="object['columnName']"/>,如果又下标的情况下可以使用 <s:property value=[0].message"/> 等同于 <s:property value=message"/>
Struts2 的 值栈和ActionContext的更多相关文章
- struts2(四) ognl表达式、值栈、actionContext之间的关系
今天来说说ognl表达式在struts2中的运用. --wh 一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的任 ...
- Struts2学习(四)———— ognl表达式、值栈、actionContext之间的关系
一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的任意属性,简单说就是对javabean进行操作(重要) 2.调用 ...
- Struts2的值栈和对象栈
ValueStack 如何得到值栈: 如何将对象存入值栈: 让值栈执行表达式来获得值: 在JSP中跳过栈顶元素直接访问第二层: 在JSP中访问值栈对象本身(而不是它们的属性) ActionContex ...
- ValueStack值栈和ActionContext
Struts2在OGNL之上提供的最大附加特性就是支持值栈(ValueStack),在OGNL上下文中只能有一个根对象,Struts2的值栈则允许存在许多虚拟对象. 一:值栈(ValueStack) ...
- struts2(二)值栈 threadlocal ogal ui
值栈(重要)和ognl表达式 1. 只要是一个mvc框架,必须解决数据的存和取的问题 2. Struts2利用值栈来存数据,所以值栈是一个存储数据的内存结构 3. 把数据存在值栈中,在页面上利用 ...
- 【struts2】值栈(前篇)
1 值栈是什么? 简单的说:值栈是对应每一个请求对象的轻量级的内存数据中心. Struts2中一个很激动人心的特性就是引入了值栈,在这里统一管理着数据,供Action.Result.Intercept ...
- Struts2的值栈和OGNL牛逼啊
Struts2的值栈和OGNL牛逼啊 一 值栈简介: 值栈是对应每个请求对象的一套内存数据的封装,Struts2会给每个请求创建一个新的值栈,值栈能够线程安全的为每个请求提供公共的数据存取服务. 二 ...
- 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】
一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...
- Struts2 之值栈
值栈(ValueStack) http://www.cnblogs.com/bgzyy/p/8639893.html 这是我的有关 struts2 的第一篇文章,对于里面我们说到的一个 struts2 ...
随机推荐
- web.py学习心得
1.注意判断数字时,如果是get传递的参数,一定要用int转换.不然出错. 2.$var 定义时,冒号后的内容不是python内容,需加上$符号.如$var naviId:$naviId. 3.各个模 ...
- 页面动态table动态合并table
function hebingRows(col, atrrb) { var trs = $("table tbody tr"); var rows = 1; for (var i ...
- adb 命令集合
1. adb shell 2. adb version 查看 adb 安装版本 3. adb start-server 启动服务 4. adb kill-server 杀死服务 5. adb get- ...
- java温故系列之环境配置
-----下面的配置符号全部复制,否则会出错 JDK配置: 首先去度娘下载jdk,然后安装.这个就不贴地址了,可能会找不到 1.右键我的电脑->属性->高级系统设置->环境变量 2. ...
- js实现图片无缝连接
效果图 1.首先先看看html和css代码 <style> *{padding:0;margin:0;} #div1{margin:100px auto;background:red;wi ...
- GCD、dispatch函数介绍
iOS多线程的方法有3种: NSThread NSOperation GCD(Grand Central Dispatch) 其中,由苹果所倡导的为多核的并行运算提出的解决方案:GCD能够访问线程池, ...
- 在Spring下集成ActiveMQ
1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...
- C--关键字static
static在C中主要有两个作用: 1.修饰变量 (局部变量.全局变量 都存在内存的静态区) 静态全局变量: 作用域仅限于变量被定义的文件中,其中文件即使用extern声明也无法使用它. 静态局部变 ...
- CMake比较实用的命令小记
最近将项目迁移到CMake进行管理,对CMake进行了一些研究,觉得有一些命令非常实用但很少有资料提到,在这里做一个总结,至于太普通常用的命令就不提了. OPTION(OPTION_VAR " ...
- weedfs getsockopt: connection timed out
启动master weed master -ip 10.191.197.133 -mdir /namenode -ip.bind 10.191.197.133 I0809 16:53:51 7721 ...