【发布时间】:2011-11-08 03:12:52
【问题描述】:
我使用<h:dataTable> 列出数据库中的数据。我们在页面中有很多记录,现在我想选择多条记录,每行都有一个复选框。我怎样才能做到这一点?
【问题讨论】:
标签: jsf datatable multipleselection selectbooleancheckbox
我使用<h:dataTable> 列出数据库中的数据。我们在页面中有很多记录,现在我想选择多条记录,每行都有一个复选框。我怎样才能做到这一点?
【问题讨论】:
标签: jsf datatable multipleselection selectbooleancheckbox
我假设您的实体经过精心设计,具有唯一的技术标识符,例如数据库中的自动递增序列。
public class Entity {
private Long id;
// ...
}
如果没有,您需要添加它。
然后,将Map<Long, Boolean> 属性添加到绑定到表的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();
}
【讨论】:
if (checked.get(entity.getId())) {