Создание страниц JSF всегда отзывчивыми и функциональными даже после потери состояния просмотра - PullRequest
0 голосов
/ 22 марта 2012

Когда я оставляю приложение JSF в браузере на некоторое время (т. Е. До истечения сеанса), я также не могу успешно запустить любые методы actionlistener. Таким образом, все функции на моих страницах становятся неактивными, и при любом действии я получаю исключение:

javax.faces.application.ViewExpiredException: представление не может быть восстановлено

Затем мне необходимо повторно войти в приложение, создав тем самым новый сеанс, чтобы получить свежие страницы со свежим состоянием просмотра в сеансе, которые затем работают. Это не приводит к очень хорошему пользовательскому опыту. Я хочу полностью избежать этой ситуации, чтобы мои страницы всегда работали каждый раз, когда они используются после простоя. В настоящее время мое состояние сохранения, как и ожидалось, установлено на SERVER (я не хочу это менять).

Как сделать страницы всегда работоспособными? Поскольку не все функциональные возможности ведут к переходу на другие страницы, я думаю, faces-redirect=true не является для меня решением.

Всякий раз, когда состояние просмотра теряется, оно не может создать новое свежее состояние просмотра на лету, не ставя под угрозу пользовательский опыт!?


JSF2.1, Primefaces 3.1 Tomcat 7

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Чтобы сохранить вход пользователя в систему, просто реализуйте желаемую функцию «запомнить меня», как было дано в ответе на предыдущий вопрос: Автоматический вход в приложение JSF при повторном посещении после входа в систему .

Чтобы вызвать действия в любом случае, даже если сеанс истек, вы не можете изменить сохранение состояния на client. Если вы можете согласиться с тем фактом, что конечный пользователь видит только обновление страницы (при необходимости вместе с некоторым диалоговым окном предупреждения / информации о том, что сеанс истек и что пользователь повторно вошел в систему), то этого должно быть достаточно, чтобы просто отправить перенаправить на запрошенный URL после повторного входа в систему:

response.sendRedirect(request.getRequestURI());

Чтобы охватить также и запросы ajax, вам нужно определить заголовок запроса и вернуть специальный XML-ответ. См. Также Используя JSF 2.0 / Facelets, есть ли способ присоединить глобальный прослушиватель ко всем вызовам AJAX?

1 голос
/ 22 марта 2012

Я решил эту проблему, установив фильтр, который обнаруживает 500, а затем отправляет специальный ответ ajax для запуска перенаправления:

Используя JSF 2.0 / Facelets, есть ли способ присоединить глобальный слушатель ко всем вызовам AJAX?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...