如果您使用dataTable,則可以將dataTable組件綁定到輔助bean並確定哪個行被點擊。
<h:dataTable binding="#{backingBean.userTable}" value="#{backingBean.users}" var="user"> ... </h:dataTable>
和
<h:commandLink actionListener="#{backingBean.deleteLinkClicked}">Delete</h:commandLink>
然後支持bean:
public class BackingBean implements Serializable {
private HtmlDataTable userTable;
// implement getter/setter for userTable
public void deleteLinkClicked(ActionEvent event) {
User user = (User)userTable.getRowData();
// implement code to delete user
}
}
當使用用戶界面:再說一遍,我不知道最好的做法,但我用F:PARAM在鏈接中傳遞參數。下面是ui:重複等同於上面的內容。
<ui:repeat value="#{backingBean.users}" var="user">
<h:commandLink value="Delete" action="#{backingBean.deleteUser}">
<f:param name="userId" value="#{user.id}">
</h:commandLink>
</ui:repeat>
在支持bean:
public class BackingBean implements Serializable {
@ManagedProperty(value="#{param.userId}")
private Long userId;
// implement getter/setter for userId
public String deleteUser() {
// at this point, the userId field should have been set via the param
}
}
我認爲,你可以使用一個ActionListener而不是一個動作(如我DataTable中的例子一樣),但我還沒有嘗試過。
謝謝傑夫。現在我遇到了這個問題:重複,因爲我有一個非常具體的標記,因爲我正在使用模板。然而,當我使用數據表時,這非常有幫助。你可以看看你是否可以弄清楚如何用ui做到這一點:重複? – arg20 2011-04-12 22:21:16
你使用的是JSF 2嗎? – Jeff 2011-04-12 22:23:25
是的,mojarra實施 – arg20 2011-04-12 22:27:04