1

我有 CellTable 和 MultipleSelectionModel 附加到它。在对数据进行一些修改后,必须刷新表并且必须从服务器重新加载新数据。

但是我需要为新加载的数据更新复选框状态。所以我可以使用 selectionModel.getSelectedSet() 查询选择框——但现在我需要在表中找到这些对象并“检查”它们。

因为对象的内容发生了变化,并且由于它们在 GWT 组件内部用作 Maps 中的键 - 我被迫在这些对象上编写“包装器”,这些对象仅在 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 回答