我有一个网站,它利用了使用Spring保护的GWT,超时......让我们说一个小时。作为该过程的一部分,我试图在会话到期前5分钟实施客户端会话超时警告。
我已经为它编写了Javascript,它使用了cookies。该计时器适用于初始设置计时器,并具有重置计时器的方法,该计时器可通过本机方法在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时,都会刷新基于服务器的会话超时,因此在使用任何类型的异步调用后,初始计时器不再准确。上述函数将使用正确的超时时间更新客户端。
绝对有效的选项是调用一个本机void,它从调用{em> {我>每个方法使用异步调用调用$wnd.resetSessionTimeout()
。然而,这是很多方法,并且可扩展性差,实施效果差。
有没有办法让我设置客户端部分以观察何时生成和接收RPC,然后将原生空间放在MVP级别而不是每个方法中,即是否存在RPC观察者或监听器?
答案 0 :(得分:1)
您可以执行以下操作:
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。