0

これは、エンティティのバージョンを変更しようとした後にisDirty()メソッドが返されなかった理由について、私が以前に尋ねた (そして tbroyer が回答した) 質問の編集版です。エンティティの/処理に関する私の理解が問題であり、その質問はニシンだったと思います。この質問の最後に元の質問を残しましたが、新しい質問は次のとおりです。trueEditorRequestFactoryEditorDriverisDirty()

によって編集されているエンティティ (プロキシ) をEditorDriverコードで変更するにはどうすればよいですか? ユーザー インターフェイスの変更の結果として値が変更されることは明らかです。しかし、「舞台裏」で値を変更する方法がわかりません。私の理解では、 を呼び出すとEditorDriver.edit()プロキシ オブジェクトのコピーが作成され、その後、そのコピーへの変更は を使用して元のオブジェクトに適用されますEditorDriver.flush()。ただしEditorDriver.edit()、編集中のオブジェクトへの参照は返されません (編集中のオブジェクトへの参照を返す とは異なりRequestContext.edit()ます)。

元の(情報不足の)質問:

次の状況で EditorDriver.isDirty() メソッドが true を返さない理由がわかりません (次の onOrgSelectedEvent() メソッドは、新しい組織がリストボックスから選択されたときに呼び出されます)。

private IOrgProxy _org;
...
/**
 * Loads the currently selected Org into the editor. 
 */
@Override
public void onOrgSelectedEvent(final OrgSelectedEvent orgSelectedEvent) {
  IOrgProxy org = _clientFactory.getCache().getOrgCache().getOrg(orgSelectedEvent.getOrgId());
  _orgRequestContext = _clientFactory.getRequestFactory().newOrgRequestContext();
  _org = _orgRequestContext.edit(org);
  _orgEditorDriver.edit(_org, _orgRequestContext);
  _org.setName(_org.getName() + " (edit)");
  if (_orgEditorDriver.isDirty()) {
    _org.setName(org.getName());
  }
}

setName() 呼び出しにブレークポイントを設定すると、最初の呼び出しで編集可能な Org オブジェクトの名前が変更されますが、2 回目の setName() 呼び出しには到達しません (つまり、_orgEditorDriver.isDirty() は false を返します)。

余談ですが、EditorDriver.edit() メソッドが編集可能なプロキシ オブジェクトを返さず、RequestContext.edit() を呼び出さなければならないのは奇妙に思えますが、これは非常に小さな問題です。

4

1 に答える 1