私は持っていCellTable<UserProxy>
ます。つまり、データベースエンティティのエンティティプロキシを直接管理します。それでAsyncDataProvider<UserProxy>
、リクエストファクトリを使用してデータをフェッチするを使用します。私の列のセルはEditTextCell
です。そしてFieldUpdater<UserProxy, String>
、値を編集するためにを追加しました。ここを除いて、私の問題があります。エンティティの値を更新してすぐに保存すると、正常に機能しますが、後でボタンをクリックするだけで保存を変更する方法がわかりません。
基本的に、Apply-changesパターン(http://patterns.holehan.org/Review/ApplyChangesを参照)を実装したいので、ユーザーがテーブル内のいくつかの値を編集できるようにし、完了したらユーザーが編集できるようにします。すべての変更を保存する[適用]ボタンをクリックできます。
したがって、これについての私の考えは、saveを呼び出さずにプロキシエンティティの値を変更し、変更されたすべてのエンティティをボタンのクリックハンドラに保存することでした。
ただし、プロキシエンティティの値を変更するには、最初にctx.edit(user)を呼び出す必要があります。
nameColumn.setFieldUpdater(new FieldUpdater<UserProxy, String>() {
@Override
public void update(int index, UserProxy object, String value) {
if (!value.equals(object.getName())) {
UserRequest ur = presenter.getClientFactory().getRequestFactory().getUserRequest();
ur.edit(object);
object.setName(value);
saveButton.setEnabled(true);
}
}
});
そして、これにより、後で適用ボタンのクリックハンドラーにそれらを保存することができなくなります。
private void saveModifications() {
List<UserProxy> items = cellTable.getVisibleItems();
for (UserProxy item : items) {
UserRequest ur = presenter.getClientFactory().getRequestFactory().getUserRequest();
ur.save(item).fire();
}
cellTable.setVisibleRangeAndClearData(cellTable.getVisibleRange(), true);
}
呼び出しsave(item)
はこの例外をスローするため:java.lang.IllegalArgumentException: Attempting to edit an EntityProxy previously edited by another RequestContext
同じエンティティを表す別のクラスを作成せずにこれを回避するにはどうすればよいですか?