Как выбрать несколько строк <h: dataTable> с помощью <h: selectBooleanCheckbox> - PullRequest
2 голосов
/ 01 сентября 2011

Я использую <h:dataTable> для вывода данных из базы данных.У нас есть много записей на странице, теперь я хотел бы выбрать несколько записей с флажком в каждой строке.Как мне этого добиться?

1 Ответ

6 голосов
/ 01 сентября 2011

Я предполагаю, что ваша сущность так хорошо спроектирована, что у нее есть уникальный технический идентификатор, например, последовательность автоматического приращения из БД.

public class Entity {

    private Long id;
    // ...
}

Если нет, вам нужно добавить его.

Затем добавьте свойство Map<Long, Boolean> к компоненту, привязанному к таблице.

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

(предварительная инициализация также может происходить в (post) конструкторе, сделайте свой выбор, по крайней мере, JSF не сделает это за вас; о, также дайте ему геттер, сеттер не нужен)

Затем добавьте столбец с флажком, который сопоставляется с логическим значением по идентификатору сущности в качестве ключа.

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