我有以下代码:

<s:iterator value="reviews">

    <img src="<s:property value="#request.restaurant.portalImage.url"  />" />

    <s:property value="user.firstName" />
    <s:property value="user.lastName" />
    <s:property value="rating" />
    <s:property value="review" />

</s:iterator>

评论是评论对象的列表,其中包含评论的详细信息,例如评分和用户名。

我的问题是我无法访问循环内ValueStack上存在的任何对象。

在循环之外<s:property value="#request.restaurant.portalImage.url" />可以正常工作。但是在循环中,它会输出null。

AFAIK迭代器将其集合推送到ValueStack上,以便所有OGNL表达式都可以对此进行解析。但是我使用#表示我明确指定了要解析的根对象。

为什么仍然不起作用?

最佳答案

我整个下午都在与类似的问题作斗争。
就我而言,问题是我的迭代器变量(在您的情况下为reviews)具有与外部变量同名的字段。

无论我多么努力尝试突破迭代器的本地堆栈,它都不会访问外部变量。

如果您的评论迭代器有一个名为restaurant的字段,则无论您尝试如何,都将覆盖外部餐厅变量:(

我发现的解决方案是简单地重命名外部变量。 (例如: theRestaurant )

重命名后,它不再与内部变量冲突,并且我能够从迭代器内部对其进行访问。

关于java - 如何在Struts迭代器中访问ValueStack对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10122460/

10-12 00:32
查看更多