2014-10-10 85 views
0

我有一个使用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或听众?

回答

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,除非你想要一个特定的错误信息。

+0

哇,我从来没有想过这样做。那么,重新连线一切,以覆盖执行,而不是onSuccess将需要一段时间,但这显着改善处理。谢谢!我认为另一种方法是在构造函数中调用更新,然后让onFailure重置计时器。 – Compass 2014-10-10 19:57:41