1

このように定義されたドメイン エンティティがあるとします。

interface MyNode {
  MyNode getParent();
  void setParent(MyNode node);

  List<MyNode> GetChildren();
  void AddChild(MyNode node);
  void RemoveChild(MyNode node);

  String getText();
  void setText(String text);
}

これらのエンティティを操作する GWT Web アプリを実装しようとしています。リクエスト ファクトリとエディタ フレームワークを使用しています。そして、私は確かにいくつかの問題を抱えています:-)

リクエスト ファクトリの定義は簡単なので、ここには掲載しません。子供に関連するものはすべて のセットであるとだけ言っておきInstanceRequestます。

だから、問題#1

ツリー全体のナビゲーターが必要だとしましょう。アイデアは、ノードが 1 つしか表示されないたびに、その親またはその子のいずれかに移動できるということです。このナビゲーターでエディター フレームワークを使用したいので、MyNodeEditorやのようなエディターを作成しChildrenListEditorます。

私の知る限り、エディターは Bean スタイルのエンティティにのみ直接適用できます。MyNode textそのため、プロパティの操作に問題がない限り、childrenプロパティ ( ChildrenListEditor) の操作にはインスタンス リクエストが必要です。

私の解決策は、MyNodeEditora になるようにしValueAwareEditor、その値セットInstanceRequestを取得すると、子ノードのリストを取得するために an を開始します。そのリストは にバインドされChildrenListEditorます。

もっと簡単な解決策はありますか?かなり基本的なシナリオだと思います。

問題#2

ここMyNodeEditorで、編集できるようにすることにしました。Bean スタイルのプロパティはこれでも問題ありませんが、子についてはどうでしょうか。問題#1で言及されたコードを使用:

@Override public void setValue(MyNodeProxy value) {
  ...
  requestFactory.myNodeRequest().getChildNodes().using(value).fire(new Receiver<List<MyNodeProxy>>() {
        @Override public void onSuccess(List<MyNodeProxy> response) {
            childrenDriver.display(response);
        }           
    });
  ...
}

ここで同じエンティティに対して2つの異なるリクエストがあるため、「原因: java.lang.IllegalArgumentException: 別のRequestContextによって以前に編集されたEntityProxyを編集しようとしています」が発生します。RequestContextI 've built at にアクセスできないMyNodeEditorため、新しいものを作成していますが、失敗します。正しいアプローチは何ですか?

4

1 に答える 1

1
  1. 個別のリクエストを発行するよりも、子にアクセスするためのList<MyNodeProxy> getChildren()プロパティがあれば簡単です。MyNodeProxy

  2. エディターに実装することで、RequestContextに渡した にアクセスできます。ただし、その場合、(エディター内から) 起動するとフリーズし、他の目的で使用できなくなるため (エディター ドライバーをフラッシュした後にノードを保存するなど)、役に立ちません。に を追加できない場合は、エディター ドライバーでノードを編集する前に、子のリストを取得することをお勧めします (または、ノード インスタンスを引数として渡すのではなく、ノードの ID に基づくリクエストを使用することもできます。または、エラーの原因である値として)。RequestFactoryEditorDriverHasRequestContextgetChidrenMyNodeProxyusing()

于 2011-11-04T02:15:55.730 に答える