2011-04-12 72 views
0

我每次使用ui:repeat輸出數據表或複合組件時都會出現重複的JSF問題。假設您顯示的是用戶列表,並且在一列中有3個圖標,一個用於查看完整配置文件,另一個用於刪除用戶,另一個用於編輯其數據。由於我不能做像#{fooBean.delete(user)}這樣的事情,我應該如何處理?反覆出現的JSF問題

下面是他們佈局我說的是: http://img821.imageshack.us/img821/9039/tablev.png

我可以使用commandLink調用邏輯,但我怎麼得到用戶或物品或產品等 是否有任何非hackish的方式嗎?

回答

1

如果您使用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中的例子一樣),但我還沒有嘗試過。

+0

謝謝傑夫。現在我遇到了這個問題:重複,因爲我有一個非常具體的標記,因爲我正在使用模板。然而,當我使用數據表時,這非常有幫助。你可以看看你是否可以弄清楚如何用ui做到這一點:重複? – arg20 2011-04-12 22:21:16

+0

你使用的是JSF 2嗎? – Jeff 2011-04-12 22:23:25

+0

是的,mojarra實施 – arg20 2011-04-12 22:27:04