Omnifaces 2,0, Primefaces 5, wildFly 8,2запроса Ajax после тайм-аут сеанса показывает <частичного ответа>
После тайм-аута сеанса, если я пытаюсь сделать Ajax вызов в браузере зарегистрированного FullAjaxExceptonHandler
будет показан ответ XML, а не отображаемая страница ошибки.
Аналогичная ошибка возникает, если используется PrimeExceptionHandler
. Если оба обработчика excepton удалены, аналогичный неправильный вывод в браузере и исключение приходит. См. EDIT выход для браузера.
EDIT 2 Если строки в web.xml
изменены на "JSP" Вход
<form-login-page>/login/login.jsp</form-login-page>
<form-error-page>/login/login.jsp</form-error-page>
тогда AjaxExceptionHandler не называется.
login.xhtml очень похож на https://stackoverflow.com/a/2207147/2023524. Только с помощью RequestScope и просмотра без учета состояния.
выход в браузере:
<partial-response id="j_id1"><changes><update id="javax.faces.ViewRoot"><html xmlns="http://www.w3.org/1999/xhtml">
text of ErrorHandlerViewExpired.xhtml ...
</html></update><update id="j_id1:javax.faces.ViewState:0">stateless</update></changes></partial-response>
web.xml:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>app</realm-name>
<form-login-config>
<form-login-page>/login/login.xhtml</form-login-page>
<form-error-page>/login/login.xhtml</form-error-page>
</form-login-config>
</login-config>
<error-page>
<error-code>500</error-code>
<location>/errors/errorHandlerWeb.xhtml?faces-redirect=true</location>
</error-page>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/errors/errorHandlerViewExpired.xhtml?faces-redirect=true</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/errors/errorHandlerProg.xhtml</location>
</error-page>
лица-config.xml:
<factory>
<exception-handler-factory>
org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory
</exception-handler-factory>
</factory>
консоли:
FullAjaxExceptionHandler: An exception occurred during processing JSF ajax request. Error page '/errors/errorHandlerViewExpired.xhtml?faces-redirect=true' will be shown.: javax.faces.application.ViewExpiredException: viewId:/login/login.xhtml - Ansicht /login/login.xhtml konnte nicht wiederhergestellt werden.
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:212) [jsf-impl-2.2.11.jar:2.2.11]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.2.11.jar:2.2.11]
EDIT
Выход в браузере без некоторого ajaxExceptionHandler:
<partial-response id="j_id1">
<redirect url="/app/pageWithAjax.jsf"/>
<error>
<error-name>class javax.faces.application.ViewExpiredException</error-name>
<error-message>viewId:/login/login.xhtml - Ansicht /login/login.xhtml konnte nicht wiederhergestellt werden.
</error-message></error></partial-response>
Это ограниченная страница с логином? Как вы аутентифицируете пользователей? Весенняя безопасность? Независимо от того, что это структура проверки подлинности, кто неправильно повторяет запрос ajax JSF вместо создания нового запроса GET. – BalusC
Страница ограничена аутентификацией «FORM». Пользователи аутентифицируются через JSF Login backing bean. (Стандартный Java EE) Вход в систему - это «login/login.xhtml». Тогда это должно быть 'WildFly', что создает проблемы. Также см. Обновление – Tony
. Я перечитал вопрос и немного запутался в точном прецеденте. Понимаю ли я это право: 1) У вас есть ограниченная страница JSF, открытая в браузере. 2) Сессия заканчивается в фоновом режиме. 3) Вы запускаете запрос ajax на этой ограниченной странице JSF. 4) Вы видите с содержимым 'errorHandlerViewExpired.xhtml' plain в браузере. Правильно ли эта последовательность? –
BalusC