2

据我了解,新的 Struts2 - 值堆栈存储动作对象并将动作对象的那些成员变量放在自身上 - 因此就像一个虚拟对象。假设在我的 html 上使用 struts2 标记,我想显示其中一个成员变量,但其中很少有同名的。

<s:property name="memberpropertyname"/>

值堆栈从上到下访问此名称。如果上面的那个是不正确的怎么办?它如何解决它并选择说最后一个 - 这对我来说是一个。

任何帮助请..

4

1 回答 1

4

如果您的应用程序确实有正当理由对值进行着色,那么您有几个选择。然而,一般来说,最顶层的堆栈项(通常是动作)应该是将数据暴露给视图层的东西。

您可以通过数组表示法直接访问特定堆栈深度的任何内容:

<s:property value="[1].memberProperty"/>

这绕过了堆栈中最顶层的项目,并明确地示例下一个项目。

在合理的应用程序中,这几乎是不必要的。最多您可能需要直接访问一个动作属性,例如,在迭代期间,或者如果某些内容已被编<s:push>入堆栈(也很少见)。访问动作属性很简单:

<s:property value="#action.memberProperty"/>

我建议如果您发现您需要访问堆栈中低于操作的数据,并且该操作将视图遮挡到这些较低层,那么您做错了。如果不出意外,在推送操作之前将您需要的对象放入堆栈的任何内容都应该推送一个不太可能被操作公开的对象。

例如,保留一些应用程序范围数据的过滤器可能会使用通用名称:

<s:property value="corp.somethingUseful"/>

如果不了解您的用例以及这种情况是如何形成的,就很难提供更具体的帮助。不过,我的直觉反应是出了点问题。

于 2013-01-26T23:09:21.340 回答