【问题标题】:How to Call a GWT method whenever an Async RPC is Made每当进行异步 RPC 时如何调用 GWT 方法
【发布时间】:2014-12-06 01:13:50
【问题描述】:

我有一个使用 GWT 的网站,该网站使用 Spring 保护,超时时间为……假设一个小时。作为该过程的一部分,我正在尝试在会话到期前 5 分钟实施客户端会话超时警告。

我已经为它编写了 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 时,都会刷新基于服务器的会话超时,因此在使用任何类型的异步调用后初始计时器不再准确。上面的函数会用正确的超时时间更新客户端。

绝对可行的选项是调用一个原生 void,它从 我通过异步调用获得的每一个方法调用 $wnd.resetSessionTimeout()。但是,这种方法很多,扩展性差,实施起来也很糟糕。

有没有办法让我设置客户端部分来观察何时生成和接收 RPC,然后在 MVP 级别而不是在每个方法中放置本机 void,即是否有 RPC 观察者或侦听器?

【问题讨论】:

    标签: java javascript gwt


    【解决方案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,除非您想要特定的错误消息。

    【讨论】:

    • 哇,我从没想过这样做。好吧,重新连接所有内容以覆盖执行而不是 onSuccess 将需要一些时间,但这会显着改善处理。谢谢!我认为另一种选择是在构造函数中调用更新,然后让 onFailure 重置计时器。
    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 2012-07-27
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多