zoukankan      html  css  js  c++  java
  • Struts2中ValueStack结构和总结

    【ValueStack和ActionContext的关系】

       首先,从结构上来看ValueStack是ActionContext的一个组成部分,是对ActionContext功能的扩展。ActionContext是一个容器结构,是Struts2中用于数据存储的的场所,而ValueStack则是一个具备表达式引擎能力的数据结构,提供了一个可以进行表达式引擎的计算场所。Struts2将ValueStack置于ActionContext目的是为静态的数据添加动态的计算能力。以下也是ValueStack和ActionContext的包含关系。

    wKioL1PktoyjH7Y0AAAx2xyq7Wk394.jpg

    【ValueStack的结构】

        ValueStack是XWork用以对Ognl计算进行扩展的一个特殊的数据结构,ValueStack从数据结构的角度被定义为一组对象的集合,在进行Ognl计算时都被视作root对象,而Ognl是不支持多个root对象。ValueStack中的数据,分两个部分存放:root(对象栈)和context(一个map结构):

    wKiom1Pkv6qgZTheAAC7WAJrky4795.jpg

        ValueStack有两部分组成:Context和root获取两个对象的方法如下:

        1、向Context中存取对象的方法

        (1ActionContext.getContext()

                 .put(key,value);

                 .get(key);

                       

        (2)ActionContext.getContext().getValueStack()

                   .put(key,value);

                   .get(key);

                                     

        2、向stack中存取对象的方法:

          ActionContext.getContext().getValueStack()

                         .push();

                         .pop();

        另外还要注意一点的是ognl表达式访问request、session等作用域的对象前面要加#,如#request.user访问request作用域的user对象,其原因也很容易理解,因为request、session等对象被封装到了ValueStack的Context中,Context是一个Map结构,访问Context中的内容是要加#。

  • 相关阅读:
    易错点集合
    [NOIP2014][题解]飞扬的小鸟
    [题解]P2014 选课-树型依赖的背包
    [题解]「一本通 1.3 练习 1」埃及分数
    【NOIP2015】斗地主 题解
    NOIP2015子串题解
    单人纸牌_NOI导刊2011提高(04) [题解]
    「一本通 1.3 例 5」weight 题解(玄学搜索对象)
    NOIP2017 跳房子题解
    P1850 换教室 题解
  • 原文地址:https://www.cnblogs.com/xtdxs/p/6526071.html
Copyright © 2011-2022 走看看