如何选择的多行与

发布于 2024-12-02 16:16:44 字数 107 浏览 0 评论 0原文

我使用 列出数据库中的数据。我们在页面中有很多记录,现在我想选择多条记录,每行都有一个复选框。我怎样才能实现这个目标?

I use <h:dataTable> to list data from database. We have many records in page, now I would like to select multiple records with a checkbox in each row. How can I achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花海 2024-12-09 16:16:44

我假设您的实体设计良好,具有唯一的技术标识符,例如来自数据库的自动增量序列。

public class Entity {

    private Long id;
    // ...
}

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

然后,将 Map属性添加到绑定到表的 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}" />

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

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

I assume that your entity is that well-designed that it has an unique technical identifier, for example the auto increment sequence from the DB.

public class Entity {

    private Long id;
    // ...
}

If not, you'll need to add it.

Then, add a Map<Long, Boolean> property to the bean which is tied to the table.

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

(preinitialization can also happen in (post)constructor, take your pick, at least JSF won't do it for you; oh, give it a getter as well, a setter is not necessary)

Then, add a column with a checkbox which maps to the boolean value by entity ID as key.

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

Now, in the action method associated with the delete button, you can collect and delete the checked items as follows:

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();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文