0

我有一个DataGrid带有TextInputCell列的,使用ListDataProvider. 当单元格中的值发生更改时,我正在为正在编辑的行创建一个RequestContext并使用原始实体调用。RequestContext#edit然后,我将代理的可变版本中的字段设置为已编辑单元格中的值。这一切都很好,我可以成功地将更改保存到数据库中。但是,在服务器上,我在保存更改之前修改了值,并将修改后的实体 (DTO) 发送回客户端。在Receiver#onSuccess方法中,我将新实体存储在列表数据提供程序中,然后调用ListDataProvider#refresh. 但是显示的值DataGrid不会改变以反映服务器上的修改。我查看了提供给TextInputCell#getValue方法,并且是正确的,即它是包含在服务器上应用的修改的值。

我尝试在网格中创建另一列只是 a TextCell,并getValue为该单元格提供相同的值;在这种情况下,显示的值被刷新正确更新,反映了从服务器返回的修改后的值。

所以,我的问题是:细胞从哪里获得它的价值?当我查看我的TextInputCell#getValue方法返回的值时,它似乎是正确的值,但该值未显示在屏幕上(屏幕上显示的值是发送请求之前代理对象中的值服务器)。

注意:我查看了这个问题,但它不适用于我的情况。

4

1 回答 1

0

我有一个非常相似的问题。

我有一个页面显示有两列的网格:第一个有复选框而不是文本。复选框的值由下式给出:

public Boolean getValue(Item item) {

    return selectedItems.contains(item);
}

当用户选中复选框时,我将值存储在地图 (selectedItems) 中。页面底部有一个“清除”按钮,用于重置地图并调用表格重绘,但复选框的状态不会恢复到原始状态(即复选框保持选中状态)。

调试代码我发现 getValue() 返回正确的值,但就像表格缓存了单元格一样。

我发现的唯一解决方法是在不重建整个表格的情况下删除复选框的单元格并将其再次添加到“清除”中。

itemsTable.removeColumn(0);
itemsTable.insertColumn(0, makeSelectionColumn());

makeSelectionColumn() 方法必须返回一个新单元格。

于 2013-10-10T11:35:15.347 回答