struts Value Stack 值栈
首先声明:本文是从博客园博友的文章转载过来的,感觉说的不错。在此附上地址:http://www.cnblogs.com/jerryxing/archive/2012/04/23/2467299.html
通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说。值栈:简单的说,就是存放action的堆栈,当我们提交一个请求道server端 action时,就有个堆栈,假设action在server端进行跳转,全部action共用一个堆栈,当须要保存在action中的数据时,首先从栈顶開始
搜索。若找到同样的属性名(与要获得的数据的属性名同样)时,即将值取出。但这样的情况可能出现找到的值不是我们想要的值。那么解决此问题须要用TOP语法 和N语法来进行解决。
当在客服端进行跳转时。当有请求提交到server的action时,仅仅有一个堆栈存在,堆栈中存放的是当前的请求的action。而原来那么则销毁了(本人观 点,感觉如同request请求一样)。
众所周知。Struts2的Action类通过属性能够获得全部相关的值,如请求參数、Action配置參数、向其它Action传递属性值(通过chain结果)等等。要获得 这些參数值,我们要做的唯一一件事就是在Action类中声明与參数同名的属性,在Struts 2调用Action类的Action方法(默认是execute方法)之前,就会为对应的Action属性赋值。
要完毕这个功能,有非常大程度上。Struts 2要依赖于ValueStack对象。这个对象贯穿整个Action的生命周期(每一个Action类的对象实例会拥有一个ValueStack对象)。当 Struts 2接收到一个.action的请求后,会先建立Action类的对象实例。但并不会调用Action方法。而是先将Action类的对应属性放到
ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。仅仅是全部的属性值都是默认的值。如String类型的属性值为 null,int类型的属性值为0等。
在处理完上述工作后。Struts 2就会调用拦截器链中的拦截器。当调用全然部的拦截器后,最后会调用Action类的Action方法,在调用Action方法之前,会将 ValueStack对象顶层节点中的属性值赋给Action类中对应的属性。大家要注意,在这里就给我们带来了非常大的灵活性。也就是说。在Struts 2调用拦截器的过程中,能够改变ValueStack对象中属性的值。当改变某个属性值后。Action类的对应属性值就会变成在拦截器中最后改变该属性
的这个值。
从上面的描写叙述非常easy知道。在Struts 2的的Action类能够获得与属性同名的參数值就是通过不同的拦截器来处理的。如获得请求參数的拦截器是params,获得Action的配置參数的拦 截器是staticParams等。在这些拦截器内部读取对应的值,并更新ValueStack对象顶层节点的对应属性的值。而ValueStack对象
就象一个传送带,将属性值从一个拦截器传到了还有一个拦截器(当然。在这其间。属性值可能改变),最后会传到Action对象,并将ValueStack对 象中的属性的值终值赋给Action类的对应属性
众所周知,Strut 2的Action类通过属性能够获得全部相关的值,如请求參数、Action配置參数、向其它Action传递属性值(通过chain结果)等等。
要获得 这些參数值,我们要做的唯一一件事就是在Action类中声明与參数同名的属性,在Struts 2调用Action类的Action方法(默认是execute方法)之前,就会为对应的Action属性赋值。
要完毕这个功能。有非常大程度上,Struts 2要依赖于ValueStack对象。
这个对象贯穿整个Action的生命周期(每一个Action类的对象实例会拥有一个ValueStack对象)。当 Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的对应属性放到
ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。仅仅是全部的属性值都是默认的值,如String类型的属性值为 null,int类型的属性值为0等。
在处理完上述工作后,Struts 2就会调用拦截器链中的拦截器,当调用全然部的拦截器后,最后会调用Action类的Action方法。在调用Action方法之前,会将 ValueStack对象顶层节点中的属性值赋给Action类中对应的属性。大家要注意,在这里就给我们带来了非常大的灵活性。也就是说。在Struts 2调用拦截器的过程中。能够改变ValueStack对象中属性的值,当改变某个属性值后。Action类的对应属性值就会变成在拦截器中最后改变该属性
的这个值。
从上面的描写叙述非常easy知道,在Struts 2的的Action类能够获得与属性同名的參数值就是通过不同的拦截器来处理的。如获得请求參数的拦截器是params,获得Action的配置參数的拦 截器是staticParams等。在这些拦截器内部读取对应的值,并更新ValueStack对象顶层节点的对应属性的值。而ValueStack对象
就象一个传送带。将属性值从一个拦截器传到了还有一个拦截器(当然,在这其间,属性值可能改变),最后会传到Action对象。并将ValueStack对 象中的属性的值终值赋给Action类的对应属性.
struts Value Stack 值栈的更多相关文章
- Struts学习之值栈的理解
转自:http://blog.csdn.net/hanxuemin12345/article/details/38559979 页面一个请求发送过来,依次经过一系列拦截器(处理公共部分,如:往数据中心 ...
- Struts2学习记录-Value Stack(值栈)和OGNL表达式
仅仅是学习记录.把我知道的都说出来 一.值栈的作用 记录处理当前请求的action的数据. 二,小样例 有两个action:Action1和Action2 Action1有两个属性:name和pass ...
- Ognl值栈对象及struts标签
用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面 ...
- Struts2 (三) — OGNL与值栈
一.OGNL表达式 1.概述 1.1什么是OGNL OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单 ...
- 10.Struts2值栈
1.什么是值栈 * 值栈就相当于Struts2框架的数据的中转站,向值栈存入一些数据.从值栈中获取到数据. * ValueStack 是 struts2 提供一个接口,实现类 OgnlValueSta ...
- struts2中的值栈对象ValueStack
ValueStack, 即值栈对象. 值栈对象: 是整个struts数据存储的核心,或者叫中转站. 用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionCont ...
- Struts2 值栈总结(ValueStack)
1.获取值栈 //获取值栈的第一种方式 ValueStack valueStack1 = (ValueStack) ServletActionContext.getRequest().getAttri ...
- 请描述一下Struts2的值栈结构,以及它是如何工作的?
值栈 Value Stack 值栈是Struts2框架的核心概念.所有的核心组件都以某种方式与之进行交互,它提供对上下文信息和执行环境中元素的访问机制.值栈的内容由如下4个层级组成. 1.临时对象 这 ...
- Struts(九):值栈(OGNL)
引言 在我们开发过程中,往往会使用一个对像传递到一个具体的action中,之后到跳转页面中访问对应对象的具体的参数. 比如:我们搭建一个struts2项目: 回顾下如何搭建strut2: 1.下载的s ...
随机推荐
- Html内容超出标记宽度后自动隐藏
我们在显示长文本时,往往需要去在C#端去截取字符,但这绝对不是一个好方面,因为我们的长文本往往都是代HTML标记的,你一个载不好,就会出现乱码问题(出现半个HTML标记),而比较好的作法就是通过CSS ...
- hdu 2276 Kiki & Little Kiki 2 矩阵快速幂
题目链接 n个灯围成一圈, 1左边是n. 有两种状态, 1是亮, 0是不亮. 如果一个灯, 它左边的灯是亮的, 那么下一时刻这个灯就要改变状态, 1变为0, 0变为1. 给出初始状态和时间t, 问t时 ...
- 编tuxedo遇到服务问题
各种错误的程序报构建服务: 1. 配置为执行环境变量tmboot –y启动管理流程和服务流程 2. 每日班似这个错误:buildserv:error while loading shared li ...
- PLSQLDeveloper过期要注册表
打开运行输入 regedit 打表注册表 删除 HKEY_CURRENT_USER\Software\Allround Automations HKEY_CURRENT_USER\Software\M ...
- xcode -饼状进度条
界面搭建 创建一个画饼状的类 eatView 集成UIView #import "eatView.h" @implementation eatView // Only overr ...
- ASP.NET页面上传文件时提示文件大小超过请求解决方法
在webconfig中节点 <system.web> </system.web> 下加入以下代码:maxRequestLength为限制上传文件大小,executionTime ...
- matlab GUI之常用对话框(一)-- uigetfile\ uiputfile \ uisetcolor \ uisetfont
常用对话框(一) 1.uigetfile 文件打开对话框 调用格式: [FileName,PathName,FilterIndex]=uigetfile or [FileName, ...
- 2014.9.23window对象
一.window对象 Wondow.navigate(url); 跳转页面(与超链接的区别:可以加逻辑条件) Var a = Math.random(); 0-1之间随机数 Var a = parse ...
- C#根据文件流判断文件类型
判断文件真实的类型,不是通过扩展名来判断: /// <summary> /// 判断文件格式 /// http://www.cnblogs.com/babycool /// </su ...
- vim常用命令总结 (转)
在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format ...