循环遍历Tapestry中没有“value”属性的集合

时间:2010-09-16 11:35:29

标签: tapestry

Tapestry loop documentation显示以下示例

<t:loop source="pageNames" value="pageName">
    <td class="${tabClass}">
        <t:pagelink page="pageName">${pageName}</t:pagelink>
    </td>
</t:loop>

从组件中获取pageName变量:

@Property
private String _pageName;

我对这样的财产毫无用处。从Component中删除声明会使Tapestry感到悲伤,并抛出类似于

的异常
  

无法将'pageName'转换为组件参数绑定。 Class ...不包含名为'pageName'的属性(在属性表达式'pageName'中)。可用属性:...

如何在不声明循环值的属性的情况下使用循环标记?

2 个答案:

答案 0 :(得分:2)

我认为您不必指定t:value,只是将其删除。在某些情况下,您只想使用t:index,这完全没问题。

根据评论进行修改:

是的,没有办法在组件类中声明属性。当你不对组件类中的当前迭代值做任何事情时,它看起来有点不优雅,这是真的。在这种情况下,我倾向于使用getter和setter而不是@Property注释来避免“未使用的”编译器警告。

答案 1 :(得分:2)

您可以使用var前缀在模板中为临时变量添加前缀。所以在你的情况下,你只需说value="var:pagename"。如果pagename是诸如字符串或整数之类的基元,则可以正常工作,并且可以使用以下语法${var:pagename}在循环中的任何位置访问其值。但是,当您尝试访问其属性时失败,例如pagename.name

查看here以获取可用绑定表达式的列表,以查看可以从中提取值的其他位置(例如消息目录)。

或者您可以始终在页面类中使用@SuppressWarnings("unused")来覆盖编译器警告。

干杯。