Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT-记住RangeChangeEvent发送到表后复选框的状态_Gwt_Selection_Gwt Celltable - Fatal编程技术网

GWT-记住RangeChangeEvent发送到表后复选框的状态

GWT-记住RangeChangeEvent发送到表后复选框的状态,gwt,selection,gwt-celltable,Gwt,Selection,Gwt Celltable,我有一个附加了多重选择模型的CellTable。在对数据进行一些修改之后,必须刷新表,并且必须从服务器重新加载新数据 但是,我需要更新新加载数据的复选框状态。所以我可以使用selectionModel.getSelectedSet()查询选择框,但现在我需要在表中找到这些对象并“检查”它们 因为对象的内容发生了变化,而且它们在GWT组件的内部映射中用作键,所以我被迫在这些对象上编写“包装器”,它在equals/hashCode中只使用ID 所以基本上我在触发事件之前保存selectedSet,然

我有一个附加了多重选择模型的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);
    }
}
Set selectedSet=selectionModel.getSelectedSet();
RangeChangeEvent.fire(表…)
如果(selectedSet!=null)
对于(目标:已选择的集合){
selectionModel.setSelected(obj,true);
}
}

有更好的方法吗?

这就是
ProvideKey
的目的:创建一个
ProvideKey
实例,返回要用作其键的对象ID,并在构建选择模型时将该实例传递给选择模型:

MultiSelectionModel selectionModel=new MultiSelectionModel(new ProvidesKey()){
@凌驾
公共对象getKey(X项){
return item.getId();
}
});

这样,在检索到更新的数据后,您不应该对选择模型有任何特殊的处理:将其推送到表中,它会询问每个对象的选择模型是否被选中,并且选择模型将能够仅基于对象的ID进行回答,因此,重新使用与以前相同的选定集。

这是否意味着我不必重写类中的equals/hashCode,而只需在更新表内容后传递“selected”对象?绝对如此。默认情况下,选择模型使用一个将对象本身用作其关键点的;这意味着将在对象本身上使用
equals
hashCode
。使用返回对象ID的
ProvidesKey
equals
hashCode
将用于ID,而不是对象。你不应该有什么特别的事要做。检索更新数据后的选择模型,只需在单元格表上
setRowData
,就完成了:选择模型将仅存储ID