有没有一种方法可以取消或中止请求工厂的请求?使用 GWT 2.3。
在调用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
类中的其他方法。
另一个选择是创建一种替代的com.google.web.bindery.requestfactory.shared.RequestTransport
类型,而不是使用DefaultRequestTransport
。这种方法的缺点(以及BobV方法的优点)是您不会知道在服务器请求的哪个阶段杀死它,因此它可能已经运行了一些方法-您将不会从任何方法获得反馈,您只会停止正在进行的请求。
我怀疑这就是为什么RF没有像RPC那样的功能的原因。即使考虑到RPC或RequestBuilder的情况-它们如何通知服务器他们改变了主意,并且不运行该请求?我的理解是它们不会-它们被早期关闭的唯一方法是当它们尝试读取/写入响应时,遇到tcp错误,因为连接已关闭。(我可能错了,并且另一个线程会关注tcp连接的状态并调用thread.stop(Throwable)
,但相当长时间以来stop
已被弃用)。
ServiceLayerDecorator
子类型中通用化,可能至少包括invoke
、loadDomainObject(s)
和getSetter
等方法。然而,这显然太复杂了,不能要求GWT为您构建它...