取消GWT RequestFactory请求

时间:2011-07-23 14:21:14

标签: gwt request requestfactory

有没有办法取消/中止请求工厂请求?使用GWT 2.3

2 个答案:

答案 0 :(得分:4)

调用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类型中的其他方法重复该模式。

答案 1 :(得分:3)

另一种选择是创建替代com.google.web.bindery.requestfactory.shared.RequestTransport类型,而不是使用DefaultRequestTransport。这方面的缺点(以及BobV的方法的优点)是你不会知道服务器上的请求何时杀了它,所以它可能已经运行了你的一些方法 - 你不会从它们中的任何一个获得反馈,你只需要停止传出请求。

我怀疑这就是为什么RF没有这个功能,就像RPC那样。甚至考虑RPC或RequestBuilder的情况 - 那些如何通知服务器他们已经改变主意,并且不运行请求?我的理解是他们没有 - 他们提前关闭的唯一方法是他们尝试读/写响应,并在连接关闭时得到tcp错误。 (我可能错了,另一个线程会密切关注tcp连接的状态并调用thread.stop(Throwable),但quite a while已弃用停止。)

有一种想法是向服务器发送消息,告诉它杀死来自同一会话的其他请求 - 这需要主动参与您的服务器代码,尽管可能在ServiceLayerDecorator子类型中是通用的,可能至少包括invokeloadDomainObject(s)getSetter等。这显然是要让GWT为你建造它...