有没有办法取消/中止请求出厂请求?使用GWT 2.3
发布于 2011-07-25 05:44:22
另一种选择是创建替代的com.google.web.bindery.requestfactory.shared.RequestTransport类型,而不是使用DefaultRequestTransport。这样做的缺点(和BobV的方法的优点)是,你不知道什么时候在服务器上的请求中你杀死了它,所以它可能已经运行了你的一些方法-你不会从他们中得到任何反馈,你只是停止传出的请求。
我怀疑这就是为什么RF没有像RPC那样拥有这个特性。甚至考虑到RPC或RequestBuilder的情况--它们如何通知服务器它们已经改变了主意,并且不运行请求?我的理解是,它们不会这样做--它们被提前关闭的唯一方式是,当它们试图读/写响应时,得到一个tcp错误,因为连接已经关闭。(可能是我弄错了,另一个线程会关注tcp连接的状态并调用thread.stop(Throwable),但对于quite a while,stop已被弃用。)
一种想法是向服务器发送一条消息,告诉它取消来自同一会话的其他请求-这将需要积极参与服务器代码,可能会在ServiceLayerDecorator子类型中成为泛型,可能至少在invoke、loadDomainObject(s)和getSetter中。这显然是为了让GWT为你构建它……
发布于 2011-07-24 03:57:08
在调用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类型中的其他方法重复。
https://stackoverflow.com/questions/6800974
复制相似问题