0

を使用DataGridして、TextInputCell列を持つ がありますListDataProvider。セルの値が変更されると、編集中の行の元のエンティティを作成しRequestContextて呼び出します。RequestContext#edit次に、変更可能なバージョンのプロキシのフィールドを、編集したセルの値に設定します。これはすべてうまく機能し、変更をデータベースに正常に保存できます。ただし、サーバーでは、変更を保存する前に値を変更し、変更されたエンティティ (DTO) をクライアントに送り返します。メソッドではReceiver#onSuccess、新しいエンティティをリスト データ プロバイダーに格納してから、 を呼び出しますListDataProvider#refresh。ただし、 に表示される値はDataGrid変更されず、サーバーでの変更が反映されません。に提供される値を見てきましたTextInputCell#getValueつまり、サーバーに適用された変更を含む値です。

グリッドに別の列を作成しようとしましたが、そのセルTextCellに同じ値を指定しました。getValueこの場合、表示された値は更新によって正しく更新され、サーバーから返された変更された値が反映されます。

だから、私の質問は次のとおりです。セルはどこでその値を取得しますか? メソッドによって返された値を見るTextInputCell#getValueと、正しい値のように見えますが、その値は画面に表示されていません (画面に表示されている値は、要求を送信する前にプロキシ オブジェクトにあった値です)。サーバー)。

注: この質問を見ましたが、私の状況ではうまくいきませんでした。

4

1 に答える 1

0

私は非常によく似た問題を抱えています。

2 つの列を持つグリッドを表示するページがあります。最初の列には、テキストではなくチェック ボックスがあります。チェックボックスの値は次の式で与えられます。

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 に答える