Когда мой сеанс истек в моем Java EE 7, веб-приложении JSF.Переадресация на ViewExpiredException в запросе AJAX в JSF 2
Я получаю исключение ViewExpiredException в запросах ajax.
Я хотел бы перенаправить на страницу, где он показывает пользователю, что сеанс истек.
Я пробовал просматривать google и stackoverflow для решения, но мне не повезло, чтобы он работал с тем, как я этого хочу.
UPDATE:
Я попытался решение отправил @Session timeout and ViewExpiredException handling on JSF/PrimeFaces ajax request
Он сделал работу на моей странице входа в систему, при использовании кнопки login_submit.
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://xmlns.jcp.org/jsf/html"
template="./../templates/login_template.xhtml">
<ui:define name="title">
<h:outputText value="#{bundle.login_title}"/>
</ui:define>
<ui:define name="content">
<h:outputText escape="false" value="#{bundle.login_message}"/>
<h:form>
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="username" value="#{bundle.login_username}"/>
<p:inputText id="username" type="text" value="#{authBean.username}" label="username"/>
<h:outputLabel for="password" value="#{bundle.login_password}"/>
<p:inputText id="password" type="password" value="#{authBean.password}" label="password"/>
<h:outputText value="#{bundle.login_invalid_password}" rendered="#{!authBean.validPassword and authBean.validUsername}"/>
<h:outputText value="#{bundle.login_invalid_username}" rendered="#{!authBean.validUsername}"/>
<p:commandButton value="#{bundle.login_submit}" action="#{authBean.doLogin}"/>
</h:panelGrid>
</h:form>
</ui:define>
</ui:composition>
Но он не работает с этим JSF в странице Xhtml, которая находится на защищенной странице, Логин страница является публичной страницей. Например, следующий XHTML на защищенной странице:
<p:commandButton styleClass="button #{chartBean.isViewButtonActive('MONTH')}" update="dataChart dataTable @form" value="#{bundle.performance_year}" action="#{chartBean.changeModel('MONTH')}" />
Это делает запрос поста AJAX, но он получает поймали мой @WebFilter. (Это также происходит с selectOneMenu от Primefaces). Этот фильтр проверяет, зарегистрирован ли пользователь, если он не перенаправляет их на страницу входа. Но по какой-то причине с приведенной выше кнопкой примера она также попадает в @WebFilter, и запросы ajax получают как перенаправление ответа, указанное в @WebFilter. Он не попадает в ExceptionHandler. @WebFilter применяется только к защищенным страницам, см. Ниже.
@WebFilter(
filterName = "AuthorizationFilter",
urlPatterns = {"/secure/*"},
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class AuthorizationFilter implements Filter {
Кто-нибудь знает, как это решить.
См отредактированный ответ. –