質問

リクエストファクトリーリクエストをキャンセル/中止する方法はありますか? GWT 2.3の使用

役に立ちましたか?

解決

別のオプションは、代替手段を作成することです com.google.web.bindery.requestfactory.shared.RequestTransport 使用する代わりに入力します DefaultRequestTransport. 。これの欠点(そしてBobvのアプローチの利点)は、サーバーのリクエストでそれを殺すときにいつわからないということです。そのため、すでにいくつかの方法を実行している可能性があります。発信リクエストを停止するだけです。

これがRPCがそうであるように、RFにすでにこの機能を持っていない理由だと思います。 RPCの場合でも、またはRequestBuilderの場合でも考えてみてください。これらは、彼らが考えを変えたことをサーバーに通知し、リクエストを実行しないことをどのように通知しますか?私の理解は、彼らがそうではないということです - 彼らが早期にシャットダウンする唯一の方法は、彼らが応答を読み取り/書き込み、接続が閉じられているため、TCPエラーを取得しようとするときです。 (私は間違っている可能性があり、別のスレッドがTCP接続の状態と呼び出しに目を向けている可能性があります thread.stop(Throwable), 、しかし、停止は非推奨されています かなり長い間.)

1つの考えは、サーバーにメッセージを送信し、同じセッションから他のリクエストを殺すように指示することです。これには、サーバーコードへの積極的な参加が必要になります。 ServiceLayerDecorator おそらく少なくともサブタイプ invoke, loadDomainObject(s), 、 と getSetter, 、とりわけ。これは明らかに、GWTにあなたのためにそれを構築するように頼むように関与することです...

他のヒント

後にリクエストをキャンセルする方法はありません fire() 方法が呼び出されました。カスタムの構築を検討してください Receiver 次のような基本クラス:

public abstract class CancelableReceiver<V> extends Receiver<V> {
  private boolean canceled;

  public void cancel() {
    canceled = true;
  }

  @Override
  public final void onSuccess(V response) {
    if (!canceled) {
      doOnSuccess(response);
    }
  }

  protected abstract void doOnSuccess(V response);
}

パターンは、他の方法で繰り返すことができます Receiver タイプ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top