2010-09-16 122 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")來覆蓋該屬性以抑制編譯器警告。

乾杯。