struts-值栈

1. 关于值栈:

  • 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].message

    • [n] 的含义是从第n 个开始搜索,而不是只搜索n个对象
    • 若从栈顶对象开始搜索,则可以省略下标部分:message
    • 结合s:property 标签:<s:property value="[0].message" />  <s:property value="message" />(通常情况下采用这种方式)

 3. 默认情况下, Action 对象会被Struts2 自动的放到值栈的栈顶

 

 

4. Struts2 自动把Action 对象放入到值栈中

放入的时间点为:struts2 终将调用Action 类的Action 方法。但在调用该方法之前:

  • 先创建一个StrutsActionProxy 对象
  • 在创建StrutsActionProxy 之后,对其进行初始化时,把Action对象放入了值栈中。

posted on 2016-06-10 15:52  我表情悠哉  阅读(136)  评论(0编辑  收藏  举报

导航