Struts2的值栈-OGNL

来源:互联网 发布:小白源码 编辑:程序博客网 时间:2024/05/02 00:10


1、Struts2的值栈

1)使用EL的 ${productName}读取的productName值, 实际上该值不在request等域对象中,而是从值栈中获取的。
2)ValueStack:
I. 可以从ActionContext中获取值栈对象。
II.值栈分为两个逻辑部分:

> Map栈:实际上是OgnlContext类型,是个Map,也是对ActionContext的一个引用,里面保存了各种Map:
requestMap,sessionMap,applicationMap,parametersMap,attr

> 对象栈:实际上是CompoundRoot类型,是一个ArrayList定义的栈,里面保存着和Action实例相关的对象,
是一个数据结构意义上的栈。


2、Struts2利用 s:property 标签和 OGNL表达式来读取值栈中的属性值;
值栈中的属性值:


> 对象栈:对象栈中某一个对象的属性值
I.读取对象栈中的对象属性:
Object.propertyName; Object['propertyName']; Object["propertyName"]

II.引用对象栈里的对象
ObjectStack 里的栈顶对象可以用 [0] 来引用, 它下面的那个对象可以用 [1] 引用;
例如:要读取栈顶对象的message属性:[0].message 
[n] 的含义是从第 n 个开始搜索, 而不是只搜索第 n 个对象;
若从栈顶对象开始搜索, 则可以省略下标部分


III.结合s:property 标签:
<s:property value="[0].message" /> 等价于 <s:property value="message" />

> Map栈:request,session,application的一个属性值或一个请求参数的值。

I.读取Map栈中的对象属性:
#Object.propertyName; #Object['propertyName']; #Object["propertyName"]


3、默认情况下,Action对象会被Struts2自动的放入到值栈的栈顶。
<%@ taglib prefix="s" uri="struts-tags" %>
<s:debug></s:debug>: 调试信息显示;











0 0