我有一个使用 GWT 的网站,该网站使用 Spring 进行保护,超时时间为......假设一个小时。作为该过程的一部分,我尝试在 session 过期前 5 分钟实现客户端 session 超时警告。
我已经为其编写了 Javascript,它利用了 cookie。定时器的作用是初始设置定时器,并且有一个重置定时器的方法,可以通过本地方法在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 时,基于服务器的 session 超时都会刷新,因此在使用任何类型的异步调用后初始计时器不再准确。上面的函数将使用正确的超时时间更新客户端。
绝对有效的选项是调用一个 native void,它从我使用异步调用的每个方法调用 $wnd.resetSessionTimeout()
。然而,方法很多,可扩展性很差,而且实现起来很糟糕。
有没有办法让我设置客户端部分来观察 RPC 何时被创建和接收,然后将 native void 放入 MVP 级别而不是每个方法中,即是否有 RPC 观察者或监听器?
最佳答案
你可以这样做:
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。
关于java - 如何在进行异步 RPC 时调用 GWT 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26306671/