反复出现的JSF问题

  • 本文关键字:JSF 问题 java jsf
  • 更新时间 :
  • 英文 :


每次使用ui:repeat输出数据表或复合组件时,我都会遇到一个反复出现的JSF问题。假设您正在显示一个用户列表,在其中一列中有3个图标,一个用于查看完整的配置文件,另一个用于删除用户,另一个用于编辑他的数据。因为我不能做一些像#{fooBean.delete(用户)}我应该如何处理这个?

这是我说的布局:http://img821.imageshack.us/img821/9039/tablev.png

我可以使用commandLink来调用逻辑,但我如何获得用户或文章或产品等。有没有不太俗气的方法?

如果使用的是dataTable,则可以将dataTable组件绑定到后台bean,并找出被单击的是哪一行。

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

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

当使用ui:repeat时,我不知道最佳实践,但我已经使用f:param在链接中传递参数。下面是与上面等价的ui:repeat。

<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的例子),但我还没有尝试过。

相关内容

  • 没有找到相关文章

最新更新