2013-07-03 48 views
0

我有DataGridTextInputCell列,使用ListDataProvider。當單元格中的值發生更改時,我正在創建一個RequestContext並將RequestContext#edit與正在編輯的行的原始實體一起調用。然後,我將代理的可變版本中的字段設置爲編輯單元格中的值。這一切都很好,我可以將更改成功保存到數據庫。但是,在保存更改之前,在服務器上修改該值,並將修改後的實體(DTO)發送回客戶端。在Receiver#onSuccess方法中,我將新實體存儲在列表數據提供程序中,然後致電ListDataProvider#refresh。但DataGrid中顯示的值不會更改以反映服務器上的修改。我查看了提供給TextInputCell#getValue方法的值,它是正確的,也就是說,它是包含在服務器上應用的修改的值。GWT DataTable TextInputCell未顯示正確的值

我試圖在網格中創建另一個列,它只是一個TextCell,併爲該單元格的getValue提供了相同的值;在這種情況下,刷新顯示值正確更新,反映了服務器返回的修改值。

所以,我的問題是:細胞在哪裏獲得它的價值?當我查看我的TextInputCell#getValue方法返回的值時,它看起來是正確的值,但該值並未顯示在屏幕上(屏幕上顯示的值是發送請求之前代理對象中的值到服務器)。

注:我看着這個question,但它沒有在我的情況。

回答

0

我有一個非常類似的問題。

我有一個頁面顯示兩列的網格:第一個有複選框,而不是文本。

public Boolean getValue(Item item) { 

    return selectedItems.contains(item); 
} 

當用戶檢查複選框,I的值存儲在一個映射(selectedItems): 複選框的值由下式給出。 頁面底部有一個「清除」按鈕,用於重置地圖並調用表格重繪,但複選框的狀態不會恢復到原始狀態(即複選框保持選中狀態)。

調試代碼我發現getValue()返回正確的值,但就像表緩存單元格一樣。

我發現的唯一解決方法是在不重建整個表的情況下,刪除複選框的單元格,並在「清除」中再次添加它。

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

makeSelectionColumn()方法必須返回一個新的單元格。