如何使用<h:selectBoolean复选框选择多行<h:dataTable>>



我使用<h:dataTable>列出数据库中的数据。我们在页面中有许多记录,现在我想在每行中选择多个带有复选框的记录。我怎样才能做到这一点呢?

我假设您的实体设计得很好,它具有唯一的技术标识符,例如来自DB的自动递增序列。

public class Entity {
    private Long id;
    // ...
}

如果没有,你需要添加它。

然后,向绑定到表的bean添加一个Map<Long, Boolean>属性。

private Map<Long, Boolean> checked = new HashMap<Long, Boolean>();

(预初始化也可以发生在(post)构造函数中,您可以选择,至少JSF不会为您做;哦,也给它一个getter,不需要setter)

然后,添加一个带有复选框的列,该复选框通过实体ID作为键映射到布尔值。

<h:dataTable value="#{bean.entities}" var="entity">
    <h:column>
        <h:selectBooleanCheckbox value="#{bean.checked[entity.id]}" />
    </h:column>
    ...
</h:dataTable>
<h:commandButton value="Delete" action="#{bean.delete}" />

现在,在与删除按钮相关联的动作方法中,您可以收集和删除选中的项,如下所示:

public void delete() {
    List<Entity> entitiesToDelete = new ArrayList<Entity>();
    for (Entity entity : entities) {
        if (checked.get(entity.getId())) {
            entitiesToDelete.add(entity);
        }
    }
    entityService.delete(entitiesToDelete);
    checked.clear();
    loadEntities();
}

相关内容

  • 没有找到相关文章

最新更新