У меня есть следующий код в onModuleLoad() моего приложения:GWT-RPC
Window.addWindowClosingHandler(new ClosingHandler() {
@Override
public void onWindowClosing(ClosingEvent event) {
event.setMessage("If you choose to close, application will sign out");
}
});
//sign out on close
Window.addCloseHandler(new CloseHandler<Window>() {
@Override
public void onClose(CloseEvent<Window> event) {
sendLogout();
}
});
Функция sendLogout() выглядит следующим образом:
// Set up the callback object.
AsyncCallback<String> callback = new LogoutCallback(this);
// Make the call to the survey service.
SurveySystemService.Util.getInstance().logout(details, callback);
Где 'детали' это какой-то объект.
Он прекрасно работает, когда окно закрыто, но если я попытаюсь обновить страницу, он не выходит из системы. Я понял, что, поскольку вызов является асинхронным, он не завершает вывод сообщения на сервер до перезапуска модуля.
Я пробовал: 1. создание и вызов обратного вызова внутри метода onClose. 2. используя таймер, чтобы проверить, был ли вызов выполнен. 3. Бесконечные лосы, которые проверяют то же, что и выше (я отчаялся).
Во всех этих решениях программа достигнет создания обратного вызова, но сервер так и не получил ничего.
любая помощь с этим?
В конечном итоге я использовал Cookies, чтобы сделать то, что вы предложили, и это работает, спасибо! Один урок, который я узнал из этого проекта, состоит в том, что gwt-rpc является дьяволом: P – AoGenius