1.对象栈(root栈)
(1)对象栈: 实际上是 CompoundRoot 类型, 是一个使用 ArrayList 定义的栈. 里边保存各种和当前
Action 实例相关的对象. 是一个数据结构意义的栈.
(2)读取对象栈中对象的属性:
> 若想访问 Object Stack 里的某个对象的属性. 可以使用以下几种形式之一:
object.propertyName ; object['propertyName'] ; object["propertyName"]
> ObjectStack 里的对象可以通过一个从零开始的下标来引用. ObjectStack 里的栈顶对象可以用 [0] 来引用,
它下面的那个对象可以用 [1] 引用.
[0].message
> [n] 的含义是从第 n 个开始搜索, 而不是只搜索第 n 个对象
> 若从栈顶对象开始搜索, 则可以省略下标部分: message
> 结合 s:property 标签: <s:property value="[0].message" /> <s:property value="message" />
3). 默认情况下, Action 对象会被 Struts2 自动的放到值栈的栈顶.
2.Map栈。
Map 栈: 实际上是 OgnlContext 类型, 是个 Map, 也是对 ActionContext 的一个引用. 里边保存着各种 Map: requestMap, sessionMap, applicationMap, parametersMap, attr
从map栈中取值可以使用EL表达式,也可以使用struts2定义的标签来访问Map栈中的数据:
productName: ${sessionScope.product.productName}
productName1: <s:property value="#session.product.productName" />
使用OGNL表达式还可以调用:
-任何一个Java类中的静态字段和方法;
-压入ValueStack栈的对象的公共字段和方法
·struts2默认情况下不允许调用任意Java类的静态方法,需要重新设置struts.ognl.allowStaticMethodAccess标记常量的值为true.
调用静态字段或方法需要使用如下的语法:
-@java.util.Calendar@DeCEMBER
<s:property value="@java.lang.Math@PI"/>
-@app4.Util@now()
<s:property value="@java.lang.Math@cos(0)"/>
网友评论