取消GWT RequestFactory请求

3
有没有一种方法可以取消或中止请求工厂的请求?使用 GWT 2.3。
2个回答

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 类中的其他方法。


谢谢,正如你所指出的那样,这并不能真正解决问题,因为服务器仍然会认为它需要继续处理请求。 我在这里创建了一个问题:http://code.google.com/p/google-web-toolkit/issues/detail?id=6610 - fabiangebert

3

另一个选择是创建一种替代的com.google.web.bindery.requestfactory.shared.RequestTransport类型,而不是使用DefaultRequestTransport。这种方法的缺点(以及BobV方法的优点)是您不会知道在服务器请求的哪个阶段杀死它,因此它可能已经运行了一些方法-您将不会从任何方法获得反馈,您只会停止正在进行的请求。

我怀疑这就是为什么RF没有像RPC那样的功能的原因。即使考虑到RPC或RequestBuilder的情况-它们如何通知服务器他们改变了主意,并且不运行该请求?我的理解是它们不会-它们被早期关闭的唯一方法是当它们尝试读取/写入响应时,遇到tcp错误,因为连接已关闭。(我可能错了,并且另一个线程会关注tcp连接的状态并调用thread.stop(Throwable),但相当长时间以来stop已被弃用)。

一个思路是向服务器发送一条消息,告诉它终止来自同一会话的其他请求——这需要在您的服务器代码中积极参与,可能在ServiceLayerDecorator子类型中通用化,可能至少包括invokeloadDomainObject(s)getSetter等方法。然而,这显然太复杂了,不能要求GWT为您构建它...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接