2012-06-04 2 views
0

У меня есть следующий код в 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. Бесконечные лосы, которые проверяют то же, что и выше (я отчаялся).

Во всех этих решениях программа достигнет создания обратного вызова, но сервер так и не получил ничего.

любая помощь с этим?

ответ

0

Вы можете просто вызвать выход из системы в любое время, когда страница сначала загружается. Из-за безгражданности веб-приложения GWT не будет знать разницу между тем, кто хочет обновить или просто перейти на страницу.

Вы можете сохранить переменную ID в хранилище сеансов, которая должна поддерживаться до тех пор, пока окно браузера или вкладка не будут закрыты. Если при запуске приложения переменная идентификатора существует в хранилище сеансов, вы можете использовать ее для запуска выхода из системы.

+0

В конечном итоге я использовал Cookies, чтобы сделать то, что вы предложили, и это работает, спасибо! Один урок, который я узнал из этого проекта, состоит в том, что gwt-rpc является дьяволом: P – AoGenius