开发者

Recurring JSF problem

I have a recurring JSF problem everytime I output datatables or composite components using ui:repeat. Suppose you are displaying a list of users, and in one column you have 3 icons, one to view the full profile, another to delete the user, and another to edit his data. Since i can't do something like #{fooBean.delete(user)} how should I handle this?

Here's they layout I'm talking about: http://img821.imageshack.us/img821/9039/tablev.png

I can use commandLink to invoke logic but how do I get the user or article or product etc. 开发者_StackOverflow社区Is there any non-hackish way?


If you're using a dataTable, you can bind the dataTable component to the backing bean and figure out which row was clicked.

<h:dataTable binding="#{backingBean.userTable}" value="#{backingBean.users}" var="user"> ... </h:dataTable>

and

<h:commandLink actionListener="#{backingBean.deleteLinkClicked}">Delete</h:commandLink>

Then the backing 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
    }
}

When using ui:repeat, I don't know the best practice, but I've used f:param to pass a parameter in the link. Below is the ui:repeat equivalent of the above.

<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>

In the backing 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
    }
}

I think that you could use an actionListener instead of an action (as I did in the dataTable example), but I haven't tried it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜