如何在任何异步RPC调用时调用GWT方法
问题描述:
我有一个使用GWT的网站,该网站使用Spring进行保护,超时时间为...假设一个小时。作为该过程的一部分,我试图在会话过期前5分钟实施客户端会话超时警告。如何在任何异步RPC调用时调用GWT方法
我已经为它写出了使用cookies的Javascript。定时器的工作原理是初始化定时器,并且有一个方法可以通过本地方法重置可以在GWT中使用的定时器。
function resetSessionTimeout() { //update the cookie for the expected timeout
var date = new Date();
var timeoutTime = 55 * 60 * 1000;
date.setTime(date.getTime() + timeoutTime);
createCookie('timeout', date.getTime(), 1);
}
每当一个RPC是对服务器进行,基于服务器的会话超时被刷新,所以最初的计时器不再使用任何类型的异步调用后准确。上面的函数会用正确的超时时间更新客户端。
绝对可行的选项是调用一个本机无效,它调用$wnd.resetSessionTimeout()
从每一种方法我有异步调用。然而,这是很多方法,并且可扩展性差,执行性差。
有没有办法让我设置客户端部分来观察每一个RPC已经被创建和接收,然后把原生的void放在MVP级别而不是每个方法,即是否存在RPC Observers或听众?
答
你可以这样做:
public class MyCallback<T> implements AsyncCallback<T> {
public MyCallback() {
}
@Override
public void onFailure(T result) {
/*
* Show standard error message. You can override it
* with a more specific message where necessary.
*/
}
@Override
public void onSuccess(T result) {
execute(result);
// Call your timer, etc.
}
protected void execute(T result) {
// Override this method when making calls.
}
}
现在你可以替换myCallBack函数所有的AsyncCallback对象。作为额外的奖励,你不必每次都忽略onFailure,除非你想要一个特定的错误信息。
哇,我从来没有想过这样做。那么,重新连线一切,以覆盖执行,而不是onSuccess将需要一段时间,但这显着改善处理。谢谢!我认为另一种方法是在构造函数中调用更新,然后让onFailure重置计时器。 – Compass 2014-10-10 19:57:41