Как обработать исключение тайм-аута сеанса (с Местами и Действиями MVP)? - PullRequest
1 голос
/ 01 августа 2011

как вы обрабатываете запрос на тайм-аут в приложении GWT? Вот фрагмент моего файла web.xml:

<session-config>
<session-timeout>30</session-timeout>
</session-config>

Мой проект GWT основан на деятельности и местах MVP. Всякий раз, когда пользователь ждет более 30 минут, я хочу отобразить всплывающее окно и перенаправить пользователя на страницу входа. Вот что я делаю для все услуги RPC:

 public void onFailure(Throwable caught) {
    ...
    if (caught instanceof InvocationException) {
                    {
                        Window.alert("Time out de session. Veuillez vous reconnecter. 2");
                        Window.open(GWT.getHostPageBaseURL() + "identification.html", "_self", null);
                        return;
                    }
    ...}

Это работает, но несколько вещей раздражают: 1) перехваченное исключение должно быть RequestTimeoutException. Но он не пойман, поэтому вместо этого я использую InvocationException. Почему это не пойман? 2) как я могу обработать это исключение более общим способом? Немного глупо отлавливать это исключение во всех сервисах RPC ... Я читал о каком-то классе AsyncCallbackAdapter ... 3) Прямо сейчас я работаю только с сервисами RPC, но, конечно, исключение тайм-аута встречается везде: ссылки, кнопки, обновление страницы Я использую Места и Действия MVP. Есть ли способ перехватить это исключение, когда пользователь пытается перейти в какое-то место?

Спасибо за помощь

1 Ответ

2 голосов
/ 02 августа 2011
  1. RequestTimeoutException генерируется, когда сервер не отвечает.

  2. Вы должны создать собственное проверенное исключение, например, SessionTimeoutException, и обработать его в своем клиентском коде. GWT знает, как обрабатывать (сериализовать) проверенные исключения и передавать их клиентскому коду: http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html#exceptions

    Чтобы справиться с этим в масштабе всего приложения, вы можете подключиться к механизму RPC, создав собственный генератор для удаленных служб: Как перенаправить на страницу входа после истечения сеанса в вызове RPC GWT

  3. Самый простой способ (без изменения всего существующего кода) - установить Timer для периодической проверки (каждые несколько минут) сеанса сервера. Когда время сеанса истечет, покажите модальный DialogBox (предотвращающий ввод пользователя в другие виджеты), уведомляющий пользователя, что ему / ей нужно войти снова.

...