2010-09-16 118 views
0

Tapestry loop documentation一个“值”属性显示以下示例循环遍历集合而不挂毯

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

其中页面名变量从部件拾起:

@Property 
private String _pageName; 

我有没有用对于这样的财产。从组件删除声明使Tapestry悲伤并抛出类似于

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

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

回答

2

我不认为你必须指定t:value,只是不说。在某些情况下,您只需要使用t:index,那完全没问题。

编辑基于评论:

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

+0

感谢您的回复。关键是如果我想访问迭代中的某些信息,比如值和索引,我需要声明一个属性,对吧? – 2010-09-23 10:51:59

+0

@Robert:现在我明白你的意思了,我已经更新了我的答案。 – Henning 2010-09-23 11:34:47

+0

谢谢澄清。 – 2010-09-23 14:36:55

2

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

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

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

干杯。