zoukankan      html  css  js  c++  java
  • Struts2 的 值栈和ActionContext

    1、ValueStack 和 ActionContext 的关系与区别:

      -- 相同点:它们都是在一次HTTP请求的范围内使用的,它们的生命周期都是一次请求

      -- 不同点:ValueStack 分为对象栈(Object Stack) 和 Map栈(Map Context),而ActionContext就是一个映射的Map结构

      --  联系 :  ValueStack.getContext()方法得到的Map 其实就是ActionContext 的Map。在查看Struts2的源代码可知(Struts2.3.1.2的org.apache.struts2.dispatcher.ng.PrepareOperations的第79行,createActionContext方法),在创建ActionContext的时候,就是把ValueStack.getContext()作为ActionContext的构造函数的参数,而Aaction中,可以通过 Action.getContext().getValueStack()方法获取ValueStack对象。所以本质上,这两个对象是可以相互获得的。

       -- 有关于VauleStack,可以通过下图基本了解:

      

    2、ValueStack:由上图可知ValueStack是由 Map栈 和 对象栈 组成的。ValueStack的基础是ONGL,要想了解ValueStack,必须理解OGNL(Object Graphic Navigatino Language)。OGNL是Struts2中使用的一种表达式语言,它可以使用Jsp标签库,以便可以访问各种对象的属性,它用于页面将参数传递到Action中(并进行类型转换)。OGNL这里就不介绍了。下篇随笔会介绍

      --> Map栈 : 实际上是OgnlContext类型,是个Map,也是 ActionContext的一个引用,里面包括 requestMap,sessionMap,applicationMap,parameterMap,attr

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

    3、在Jsp页面上可以通过OGNL(Object Graphic Navigatino Language 对象-图导航语言)来直接访问值栈(ValueStack)里的对象属性。若想访问Object Stack的某个对象的属性。可以使用以下几种形式

      --> object.propertyName 、object['propertyName']、object["propertyName"]

      --> Object Stack 里的对象可以通过一个从零开始的下标来引用,Object Stack 里的栈前对象可以用[0]来引用,它下面的对象可以用[1]引用 [0].message

      --> [n]的含义是从第N个元素开始搜索,不是只搜索第N个对象

      --> 若是从栈顶开始搜索 [0]是可以省略的,直接写出message  

      --> 结合 s:property 标签  :如果又下标的情况下可以使用 <s:property value=[0].message"/> 等同于 <s:property value=message"/>

    --> 若是访问的是对象栈中的数据 <s:property value="object.columnName"/>  或  <s:property value="object['columnName']"/>如果又下标的情况下可以使用 <s:property value=[0].message"/> 等同于 <s:property value=message"/>


      

  • 相关阅读:
    Java高级之类结构的认识
    14.8.9 Clustered and Secondary Indexes
    14.8.4 Moving or Copying InnoDB Tables to Another Machine 移动或者拷贝 InnoDB 表到另外机器
    14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构
    14.8.2 Role of the .frm File for InnoDB Tables InnoDB 表得到 .frm文件的作用
    14.8.1 Creating InnoDB Tables 创建InnoDB 表
    14.7.4 InnoDB File-Per-Table Tablespaces
    14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小
    14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小
    14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB
  • 原文地址:https://www.cnblogs.com/hongcong/p/6155692.html
Copyright © 2011-2022 走看看