关于ValueStack 有几个问题 还是没有理解透彻 希望大家一起来讨论讨论1 ValueStack有生命周期吗?有的话请问ValueStack什么时候销毁? struts2中创建几个ValueStack?
2 我们去访问action的时候 ValueStack里面保存的是action的属性 那么 请问 是一个ValueStack保存一个action属性还是可以保存多个?
3 在struts2中<s:bean>标签有这个情况
 当bean标签创建的时候 ban创建的javabean实力位于ValueStack顶端 只要bean标签结束那么bean创建的javabean就被从ValueStack移除 请问 如果是action里面的属性放在ValueStack里面 那么请问这些属性什么时候被移除呢?

解决方案 »

  1.   

    我也不太清楚,以我的理解,一个ValueStack应该是对应一次请求到响应的全过程。
      

  2.   

    那么
    ValueStack是放在request里面的
    那么StackContext 又是什么呢?
    可以理解为StackContext是一个全局的栈
    而ValueStack只是一个request的栈么?
      

  3.   

    ValueStack 是存在于 OGNL Context 中的; 首先你要明确的是, Struts2 对于值的转换, 值的填充都是 OGNL(这个功能模块,不仅仅是表达式) 在
    进行操作, opensymphony 已经将其分离成一个项目发展了, 而对于 OGNL 其具有一个OGNL Context , 
    简单说就是一个 Map ,在正规的 OGNL 规范中,OGNL Context 只允许有一个根元素, 但是 Struts2 为
    了灵活性, 默认将 OGNL Context 的根元素规定为 ValueStack (也是一个 Map ), 可以存放多个对象,
    对于 ValueStack 是栈的结构, 即先进后出, 在 Struts2 中虽无意透明 OGNL Context 但是,当我们
    进行使用 OGNL 表达式操作的时候, 其实都是在使用 ValueStack , 因为Struts2 将默认的访问 
    Context 中的值的 propertyAccssor 都重写了, 不再是原始的访问规则, 具体规则请查看 Struts2 文档 
    Tag Developers Guide 中的 OGNL 章节;
    1 ValueStack有生命周期吗?有的话请问ValueStack什么时候销毁? struts2中创建几个ValueStack? 
       这个我没有研究过, 也没有查看过其源代码, 但我猜测, 既然 ValueStack 与每一次请求的值相关,
    并且我们在页面上也需要使用到, 所以我想,其生命周期应该是从 Request 进入到 Response 返回;2 我们去访问action的时候 ValueStack里面保存的是action的属性 那么 请问 是一个ValueStack保存一个action属性还是可以保存多个? 
        既然 ValueStack 是一个 Map 结构,那么 ValueStack 是可以保存多个 Action 的, 这也是文档中为什
    么说可以使用 @vs@..., @vs1@... 来访问 ValueStack 中的第一个,第二个 Action 的依据;3 在struts2中 <s:bean>标签有这个情况 
    当bean标签创建的时候 ban创建的javabean实力位于ValueStack顶端 只要bean标签结束那么bean创建的javabean就被从ValueStack移除 
        这个是标签是如此实现的, 至于这个标签我没有使用过, 但是如果是 <s:iterator > 其便利的操作就
    是借用 ValueStack 完成的, 每一次遍历将当前元素压入栈顶, 完成够弹出栈, 这个过程可以将 <s:debug />
    标签嵌套在 <s:iterator > 标签中查看;