值栈是对应每一个请求对象的轻量级的数据存储中心,在这里统一管理着数据,供Action、Result、Interceptor等Struts2的其他部分使用,这样数据被集中管理起来而不凌乱。当有请求的时候,Struts2会为每个请求创建一个新的值栈,也就是说,栈和请求是一一对应的,不同的请求,值栈也不一样,而值栈封装了一次请求所有需要操作的相关的数据。
值栈(ValueStack):包括对象栈(ObjectStack)和ContextMap
对象栈(ObjectStack):把Action相关的对象放入其中,本质就是个数据结构意义上的栈
Map栈(ContextMap):实际上是ActionContext的一个引用,(把各种属性(或对象)的映射关系放入其中),主要有
requestMap,sessionMap,applicationMap,parametersMap
利用<s:property>标签和OGNLB表达式来读取值栈中属性值
对于对象栈:获取对象栈中某个对象的属性值
读取对象的属性:object.propertyname(object 用[n]表示,n代表从栈顶开始搜索的第n+1个对象)
例如:<s:property value="[0].message" /> 表示栈顶对象的属性,此时栈顶对象可以省略不写,变成<s:property value=“message" />
<s:property value="[1].message" />表示栈的第2 个对象的属性
对于Map栈:读取Map栈的属性
<s:property value="#session.对象.属性" />