【问题标题】:Cancel GWT RequestFactory request取消 GWT RequestFactory 请求
【发布时间】:2011-10-11 16:09:35
【问题描述】:

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

【问题讨论】:

    标签: gwt request requestfactory


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    另一种选择是创建一个替代的com.google.web.bindery.requestfactory.shared.RequestTransport 类型,而不是使用DefaultRequestTransport。这样做的缺点(以及 BobV 方法的优点)是你不知道你在服务器上的请求中什么时候杀死它,所以它可能已经运行了你的一些方法——你不会从其中任何一个那里得到反馈,您只需停止发出的请求即可。

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

    一种想法是向服务器发送一条消息,告诉它终止来自同一会话的其他请求 - 不过,这需要您的服务器代码的积极参与,可能在 ServiceLayerDecorator 子类型中通用,可能在至少invokeloadDomainObject(s)getSetter 等。这很明显是涉及到要求 GWT 为您构建它......

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 2011-06-25
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 2023-03-30
      • 2011-06-26
      • 1970-01-01
      • 2011-05-26
      相关资源
      最近更新 更多