我有一个DataGrid
,其TextInputCell
列使用ListDataProvider
。当单元格中的值发生更改时,我正在创建RequestContext
并使用正在编辑的行的原始实体调用RequestContext#edit
。然后,我将代理的可变版本中的字段设置为已编辑单元格中的值。这一切都很好,我可以将更改成功保存到数据库。但是,在服务器上,我在保存更改之前修改了值,并将修改后的实体(DTO)发送回客户端。在Receiver#onSuccess
方法中,我将新实体存储在列表数据提供程序中,然后调用ListDataProvider#refresh
。但DataGrid
中显示的值不会更改以反映服务器上的修改。我查看了提供给TextInputCell#getValue
方法的值,它是正确的,也就是说,它是包含服务器上应用的修改的值。
我尝试在网格中创建另一个只有TextCell
的列,并在getValue
为该单元格提供相同的值;在这种情况下,刷新正确更新显示的值,反映从服务器返回的修改值。
所以,我的问题是:细胞在哪里获得它的价值?当我查看TextInputCell#getValue
方法返回的值时,它似乎是正确的值,但该值未显示在屏幕上(屏幕上显示的值是先前代理对象中的值)将请求发送到服务器)。
注意:我查看了这个question,但它在我的情况下不起作用。
答案 0 :(得分:0)
我有一个非常类似的问题。
我有一个页面显示有两列的网格:第一列有复选框而不是文本。 复选框的值由:
给出public Boolean getValue(Item item) {
return selectedItems.contains(item);
}
当用户选中复选框时,我将值存储在地图中(selectedItems)。 在页面底部有一个“清除”按钮,用于重置地图并调用表格重绘,但复选框的状态不会恢复到原始状态(即复选框保持选中状态)。
调试代码我发现getValue()返回正确的值,但就像表缓存单元格一样。
我找到的唯一的解决方法是在不重建整个表格的情况下删除复选框的单元格,然后在“清除”上再次添加它。
itemsTable.removeColumn(0);
itemsTable.insertColumn(0, makeSelectionColumn());
方法makeSelectionColumn()必须返回一个新单元格。