首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Struts ValueStack中的重复属性

Struts ValueStack中的重复属性
EN

Stack Overflow用户
提问于 2014-09-11 16:15:59
回答 1查看 424关注 0票数 1

在曼宁的书“Struts2在行动中”第106页中提到了以下内容

如果在图5.1中查看这一点,您可能会认为表达式需要更类似于myAction.user.username。相反,只有user.username是必需的。这是因为ValueStack是一种虚拟对象,它将包含的对象的属性公开为自己的。

在同样的行里,它也说

如果存在重复属性(堆栈中的两个对象都具有name属性),则堆栈中最高对象的属性将是在ValueStack表示的虚拟对象上公开的属性。

我怀疑,如果我们能像第一段所描述的那样使用user.username,那么可以有另一个用户名,但是是不同的类。它可以再次用objectname.user语法访问。那麽,他们为何要提及重复物业的问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-11 17:25:44

值堆栈看起来像一个Stack,它是一个对象集合,您可以使用push()pop()peek()在顶部访问这些对象,并且它有一个根,即OGNL的复合根到期XWork扩展。

XWork在OGNL之上提供的最大补充是对ValueStack的支持。虽然OGNL是在假设只有一个“根”的情况下运行的,但是XWork的ValueStack概念需要有许多“根”。

这个复合根有一个“根”列表,在表达式计算期间从顶部(0-索引)遍历到堆栈(size()-1),直到找到值。因此,每个根都可以包含这个值,例如user.username,但是第一个找到的值将被返回。问题是如何访问其他“根”中重复的属性。解决方案是通过索引访问根。例如,top对象以[0].作为前缀,[1].是以前推送的对象,依此类推。这就是OGNL在值堆栈上的工作方式。您还可以看到当模型驱动实现在Struts 2中通过ModelDriven传递参数到操作时,我尝试访问动作bean属性的示例。

参考资料:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25792420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档