java - 重复出现的 JSF 问题

标签 java jsf

每次使用 ui:repeat 输出数据表或复合组件时,我都会遇到重复出现的 JSF 问题。假设您正在显示用户列表,其中一列中有 3 个图标,一个用于查看完整个人资料,另一个用于删除用户,另一个用于编辑其数据。既然我不能做类似 #{fooBean.delete(user)} 的事情,我应该如何处理这个问题?

这是我正在讨论的布局: http://img821.imageshack.us/img821/9039/tablev.png

我可以使用 commandLink 来调用逻辑,但如何获取用户或文章或产品等。 有没有什么非黑客的方法?

最佳答案

如果您使用的是 dataTable,则可以将 dataTable 组件绑定(bind)到支持 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
    }
}

使用 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 示例中所做的那样),但我还没有尝试过。

关于java - 重复出现的 JSF 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5642122/

相关文章:

java - 使用 jax-ws 注释将 xml 命名空间声明移动到根元素

java - 在 Glassfish 中使用来自急切获取的 JSF 托管 bean 的 spring bean 的问题

ajax - JSF Ajax 调用应用程序未执行?

validation - JSF:不同验证器标记的不同验证消息?

jsf - JSF2 Facelets 中的 JSTL ......有意义吗?

java - 在处理事件后保持 Java ActionListener 运行?

java - 如何保护我的 Java Web 应用程序?

java - 添加和读取cookie

jsf - 在 .taglib.xml 中注册自定义组件后,Netbeans 中不会自动完成属性

java - 针对不同事件的 Spring Integration 自定义轮询器