2

<h:dataTable>データベースからデータをリストするために使用します。ページには多くのレコードがあります。各行にチェックボックスを付けて複数のレコードを選択したいと思います。どうすればこれを達成できますか?

4

1 に答える 1

6

あなたのエンティティは、DBからの自動インクリメントシーケンスなど、一意の技術識別子を持っているようにうまく設計されていると思います。

public class Entity {

    private Long id;
    // ...
}

そうでない場合は、追加する必要があります。

Map<Long, Boolean>次に、テーブルに関連付けられているBeanにプロパティを追加します。

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

(事前初期化は(ポスト)コンストラクターでも発生する可能性があります。選択してください。少なくともJSFはそれを行いません。ああ、ゲッターも与えてください。セッターは必要ありません)

次に、エンティティ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();
}
于 2011-09-01T04:49:54.390 に答える