【问题标题】:How to select multiple rows of <h:dataTable> with <h:selectBooleanCheckbox>如何使用 <h:selectBooleanCheckbox> 选择多行 <h:dataTable>
【发布时间】:2011-11-08 03:12:52
【问题描述】:

我使用&lt;h:dataTable&gt; 列出数据库中的数据。我们在页面中有很多记录,现在我想选择多条记录,每行都有一个复选框。我怎样才能做到这一点?

【问题讨论】:

标签: jsf datatable multipleselection selectbooleancheckbox


【解决方案1】:

我假设您的实体经过精心设计,具有唯一的技术标识符,例如数据库中的自动递增序列。

public class Entity {

    private Long id;
    // ...
}

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

然后,将Map&lt;Long, Boolean&gt; 属性添加到绑定到表的bean。

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

(预初始化也可以发生在(后)构造函数中,随你选择,至少 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}" />

现在,在删除按钮关联的action方法中,你可以收集和删除选中的项,如下:

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();
}

【讨论】:

  • 我有完全相同的代码,但我在这一行得到了 NullPointerException if (checked.get(entity.getId())) {
猜你喜欢
  • 2011-02-01
  • 2011-04-05
  • 2011-03-18
  • 2012-06-13
  • 1970-01-01
  • 2013-12-02
  • 2015-05-27
  • 2020-10-30
  • 2011-11-22
相关资源
最近更新 更多