ValueStack介绍
valueStack也称为context map的根,它实际上是一个list,也是一个栈区(先进后出的原则),为什么说它是一个list呢?
ValueStack也有一个它自己的根,就是它内部的属性CompoundRoot它是ValueStack的根,我们说ValueStack是一个集合其实就是在说CompoundRoot(CompoundRoot继承了ArrayList)
操作ValueStack中的数据
1.操作栈中的栈顶对象
我们可以从它是一个栈区入手
分别有三个方法:push()压一个对象进栈
pop()弹栈(栈顶对象出栈)
peek()去栈顶对象
2.ValueStack中常用的API
在介绍context map时,我介绍了获取ValueStack的三种方式
这里是连接[简单介绍Struts2的数据中心 —context map],在这里就不详细说了,我们使用最简便的方式获取
ValueStack valueStack = ActionContext.getContext().getValueStack();
// 先值栈中存东西(是以key-value形式存放的)
valueStack.set("p","PPPP");
// 向值栈中存东西
// 先检测栈顶是不是一个map
// 如果不是就创建一个map
// map中的数据就是p=PPPP
// 使用push把这个map压入栈顶
// 如果有就直接向map里面存
// setValue方法,第一个参数是OGNL表达式,从栈顶找setName的方法(OGNL表达式会在后面专门的写一篇文章介绍,它是struts提供给我们的,拥有强大功能的表达式语言)
valueStack.setValue("name","杨树林")
// 使用#号就代表向context map中存放数据
// 相当于ActionContext.getContext.put();
valueStack.setValue("#p3","pppp");
// 从栈顶寻找name属性
valueStack.findValue("name");
// 从context map开始找
valueStack.findValue("#p3");
// 从栈顶开始找,找不到就会把这个p3当做key到context map中找
valueStack.findValue("p3");