进阶Java之Struts中的值栈
来源:互联网 发布:cad网络培训班 编辑:程序博客网 时间:2024/06/14 02:33
什么是值栈?
值栈:ValueStack,类似于域对象,值栈应用在Struts2的action里面,在值栈中可以存值和取值。其贯穿整个 Action 的生命周期(每个 Action 类的对象实例都拥有一个 ValueStack 对象). 相当于一个数据的中转站,我们知道,每次访问action时候,都会创建action对象,那么,在每个action对象里面就都存在一个值栈对象。
值栈的使用范围:
值栈使用在action范围。
值栈的内部结构
值栈的内部结构有两个逻辑单元:
* 一个对象栈:root ,CompoundRoot就是一个ArrayList.
* 一个ContextMap ,context OgnlContext就是一个Map.
向值栈保存数据
一般情况下说操作值栈:指的是操作值栈的root部分.
* push :将对象压入到栈顶.
* set :将对象压入到栈顶.
如果没有手动调用push或者set的时候:Action对象默认是在栈顶的.
*那么 Action中的属性是否在栈中? 答案是一定在.
如果Action实现ModelDriven接口了:
* ModelDriven对象就会在栈顶.
* push :将对象压入到栈顶.
* set :将对象压入到栈顶.
如果没有手动调用push或者set的时候:Action对象默认是在栈顶的.
*那么 Action中的属性是否在栈中? 答案是一定在.
如果Action实现ModelDriven接口了:
* ModelDriven对象就会在栈顶.
下面用代码解释一下:
//第一种:获取值栈对象,调用值栈对象里面的set方法public String execute() throws Exception {ValueStack stack = ActionContext.getContext().getValueStack();stack.set("us","user");return "stack";}
调试运行后,得到,
从上图中也可以看出,在没有用set 方法放数据之前,在栈顶位置的是
,这个正是我的Action对象,然后下面是Push方法,代码如下:
public String execute() throws Exception {ValueStack stack = ActionContext.getContext().getValueStack();stack.push("push");return "second";}调试运行后,得到:
最后测试没有手动调用set和push,结果如下;
最后调试结果:
此时,action对象在栈顶。
向值栈中获取数据
在值栈中获取数据我们一般都是通过Struts2标签和ognl表达式一起,分为获取root数据,和获取context数据。获取root中的数据较为简单,如图:
获取context中数据稍微有些不同,这种情况下要加 " # " 符号,如图:
以上是对值栈的一些简单认识吧,还望大神能补充。
1 0
- 进阶Java之Struts中的值栈
- Java进阶:Struts多模块的技巧
- 进阶struts
- [Java 进阶]Java中的国际化
- java进阶之路
- java进阶之路
- Java进阶之路
- Java进阶之路
- Java进阶之路
- java进阶之路
- java进阶之路
- Java进阶之路
- java之反射进阶
- Java进阶之JDBC
- JAVA进阶之路
- java进阶之路
- java进阶之路
- Java进阶之路
- 07_01成员变量和局部变量的区别
- Real-Time Rendering-第四章 Transforms(3)
- QuartZ Cron表达式
- struts2+hibernate4.1+spring4.1+ajax+HTML+css暂时实现登录注册功能
- 学习、探究Java设计模式——观察者模式
- 进阶Java之Struts中的值栈
- java类的成员初始化顺序和初始化块知识
- 开始新的技术生活-javascript>animate
- EventBus 3.0初探: 入门使用及其使用 完全解析
- Unity ulua/tolua slua调试教程
- 疯狂了!当游戏爱上MongoDB会怎么样???
- linux下的查找文件的命令
- 形式参数是类名
- iOS7之后经过滑动返回导航栏隐藏和显示带来的坑