1

MultipleSelectionModel が添付された CellTable があります。データを変更した後、テーブルを更新し、新しいデータをサーバーから再ロードする必要があります。

ただし、新しく読み込まれたデータのチェックボックスの状態を更新する必要があります。そのため、selectionModel.getSelectedSet() を使用して選択ボックスをクエリできますが、テーブル内でこれらのオブジェクトを見つけて「チェック」する必要があります。

オブジェクトのコンテンツが変更され、GWT コンポーネントの内部でマップのキーとして使用されるため、これらのオブジェクトに対して、equals/hashCode で ID のみを使用する「ラッパー」を作成する必要がありました。

したがって、基本的には、イベントを発生させる前に selectedSet を保存し、それを繰り返して setSelected メソッドを呼び出します。

Set<T> selectedSet = selectionModel.getSelectedSet();
RangeChangeEvent.fire(table,...)
if (selectedSet != null)
    for (T obj : selectedSet) {
        selectionModel.setSelected(obj,true);
    }
}

より良いアプローチはありますか?

4

1 に答える 1

3

これが のProvidesKey目的です:ProvidesKeyキーとして使用されるオブジェクトの ID を返すインスタンスを作成し、ビルド時にそのインスタンスを選択モデルに渡します。

MultiSelectionModel<X> selectionModel = new MultiSelectionModel<X>(new ProvidesKey<X>() {
   @Override
   public Object getKey(X item) {
      return item.getId();
   }
});

そうすれば、更新されたデータを取得した後、選択モデルに特別なことをする必要はありません。テーブルにプッシュすると、オブジェクトが選択されているかどうかを各オブジェクトの選択モデルに尋ねます。オブジェクトの ID のみに基づいて回答するため、以前と同じ選択セットを再利用します。

于 2011-12-01T09:29:55.613 に答える