3

私がやろうとしているのは、いくつかのリクエストをまとめて収集し、私のコードでそれらを起動することです:

RequestContext contextA =requestFactory
        .dataRequest().save(...).to(...);
RequestContext contextB =requestFactory
        .itemRequest().save(...).to(...);
requestA.append(requestB);
requestA.fire();

dataRequest と item リクエストは両方とも RequestContext を拡張します

そのようにこれをやろうとすると、次のようになりました:

原因: java.lang.IllegalStateException: The provided RequestContext has been changed
at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext.append(AbstractRequestContext.java:484)

それで、私は何を間違っていますか?

4

1 に答える 1

3

への引数はcleanappend()でなければなりません。 RequestContext

コードを次のように変更できます。

ItemRequest contextB = requestFactory.itemRequest();
contextA.append(contextB);
contextB.save(...).to(...);

またはもっと簡単に:

requestA.append(requestFactory.itemRequest()).save(...).to(...);

根拠: 内部的に、追加されRequestContextた s は共有状態を使用します。を呼び出すappend()と、appended の内部状態が追加先の状態にRequestContext置き換えられます。空でない場合、データが失われる (マージがない) ため、単純に失敗します。

于 2012-08-17T11:17:30.120 に答える