struts-值栈

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对象放入了值栈中。
相关文章
相关标签/搜索