1. 关于值栈:session
- helloworld时, ${productName} 读取productName 的值,实际上该属性并不在request 等域对象中,而是从值栈中获取的
- ValueStack:
- 能够从ActionContext 中获取值栈对象
- 值栈分为两个逻辑部分
- Map栈: 实际上OgnlContext 类型,是个Map,也是对ActionContext 的一个引用,里面存放着各类Map:
- requestMap
- sessionMap
- applicationMap
- parametersMap
- attr
- 对象栈:其实是CompindRoot 类型,是一个使用ArrayList 定义的栈。里边保存各类和当前Action 实例相关的对象,是一个数据结构意义的栈
2. Struts2 利用s:property 标签和OGNL 表达式来读取值栈中的属性值数据结构
- 值栈中的属性值:
- 对于对象栈: 对象中某一个对象的属性值
- Map 栈: request, session, application 的一个属性值 货 一个请求参数的属性值
- 读取对象栈中对象的属性
- 若想访问Object Stack 里面的某一个属性,能够使用以下几种形式之一:
- object.propertyName
- object['propertyName']
- object["propertyName"]
- ObjectStack 里面的对象能够经过一个从零开始的下标来引用。ObjectStack 里面的栈顶对象能够用[0] 来引用,它下面的的那个对象能够用[1] 引用
[0].messageapp
-
- [n] 的含义是从第n 个开始搜索,而不是只搜索n个对象
- 若从栈顶对象开始搜索,则能够省略下标部分:message
- 结合s:property 标签:<s:property value="[0].message" /> <s:property value="message" />(一般状况下采用这种方式)
3. 默认状况下, Action 对象会被Struts2 自动的放到值栈的栈顶对象


4. Struts2 自动把Action 对象放入到值栈中blog
放入的时间点为:struts2 终将调用Action 类的Action 方法。但在调用该方法以前:io
- 先建立一个StrutsActionProxy 对象
- 在建立StrutsActionProxy 以后,对其进行初始化时,把Action对象放入了值栈中。