我正在开发 GWT-ext 应用程序。
在此应用程序中,我管理客户端会话。为此我写了下面的代码:
管理会话:
导入 com.google.gwt.user.client.Timer;
public class ClientTimers {
private static final Timer SESSION_MAY_HAVE_EXPIRED_TIMER = new Timer() {
@Override
public void run() {
// Warn the user, that the session may have expired.
// You could then show a login dialog, etc...
}
};
public static void renewSessionTimer() {
// First cancel the previous timer
SESSION_MAY_HAVE_EXPIRED_TIMER.cancel();
// Schedule again in 5 minutes (maybe make that configurable?)
// Actually, let's subtract 10 seconds from that, because our timer
// won't be synchronized perfectly with the server's timer.
SESSION_MAY_HAVE_EXPIRED_TIMER.schedule(5 * 60 * 1000 - 10000);
}
}
获取用户活动:
Ext.get("pagePanel").addListener("click", new EventCallback() {
@Override
public void execute(EventObject e) {
//MessageBox.alert("On Mouse Click");
});
Ext.get("pagePanel").addListener("keydown", new EventCallback() {
@Override
public void execute(EventObject e) { //
//MessageBox.alert("On Key Press Click");
}
});
这段代码工作正常,但我的问题是:
当超时发生时,此代码将自动注销。对于我的代码,我希望在单击或按下按键时它应该注销。情况是这样的:如果用户已登录,注销时间为 5 分钟。用户现在不在屏幕上执行任何活动,按照上面的代码,它将在 5 分钟完成后自动注销。
现在我的要求是,如果用户登录并且在 5 分钟内没有执行任何操作。它不应该自动注销。而不是在完成 5 分钟后注销,如果用户在 6 分钟内单击或按下按键那么它应该执行注销过程。
基本上,当计时器超过指定时间时,注销过程应该在用户活动上完成,而不是自动完成。