Struts ValueStack中的重复属性

时间:2014-09-11 16:16:00

标签: java struts2 ognl valuestack

在Manning的书“Struts2 in action”第106页中,提到了

  

如果你   看看图5.1中的这个,您可能希望表达式需要更像myAction.user.username。相反,只需要user.username。这是因为ValueStack是一种虚拟对象,它将包含对象的属性公开为自己的属性。

并且在同一行中也说

  

如果存在重复属性,则堆栈中的两个对象都具有名称   property - 然后堆栈中最高对象的属性将是   一个暴露在由ValueStack表示的虚拟对象上。

我怀疑的是,如果我们可以使用第一段中描述的user.username,那么可以有另一个用户名但不同的类。可以使用objectname.user语法再次访问哪个。那他们为什么提到重复属性的问题呢?

1 个答案:

答案 0 :(得分:0)

值堆栈看起来像Stack这样的对象集合,您可以使用push()pop()peek()在顶部访问它并且它具有根,这是由于OGNL的XWork扩展而产生的复合根。

  

XWork在OGNL之上提供的最大附加功能就是支持   对于ValueStack。虽然OGNL在假设的情况下运作   只有一个" root",XWork的ValueStack概念需要很多   "根"

这个复合根有一个"根"在表达式求值期间从顶部(0指数)遍历到堆栈(size() - 1),直到找到该值。因此,每个根都可以包含示例user.username的值,但会返回第一个找到的值。问题是如何访问其他"根"中的那些重复属性。解决方案是通过索引访问根。例如,top对象的前缀为[0].[1].是之前推送的对象,依此类推。那就是OGNL如何在价值堆栈上运作。您还可以在实现模型驱动Passing parameters to action through ModelDriven in Struts 2时看到我尝试访问操作bean属性的示例。

<强>参考文献: