Обработка ViewExireException / ajax и отображение диалогового окна Primefaces
Я неt перенаправить или переслать моего пользователя на другую страницу. Так что, когда мойSessionExpiredExceptionHandler
(продолжаетсяExceptionHandlerWrapper
) обрабатывает исключение ViewExireException. Я хочу, чтобы пользователь оставался на той же странице и отображал диалог PrimeFaces. Для уведомления о том, что сеанс истек и что пользователю необходимо снова войти в систему (на основе диалога). Я использую функции Servlet 3.1 для входа / выхода пользователя иBasic/file
для auth-метода для сопоставления пользователей с различными системными ролями.
Что происходит сейчас, так это то, что представление / страница обновляется через 2 минуты, но сеанс нене может быть признан недействительным Это происходит только во второй раз, когда страница обновляется, через 4 мин.
2
Редактировать: Который обновляется метатегом:
Как я могу сделатьSessionExpiredExceptionHandler
аннулировать объект сеанса (выход из сервлета), когда исключения возникают в первый раз, и как я могу вызвать JavaScript (expireDlg.show ()) на клиенте для отображения диалога PrimeFaces?
Я смотрел на некоторые другие темы, но не нашел жизнеспособного решения.Тайм-аут сессии
SessionExpiredExceptionHandler
@Override
public void handle() throws FacesException {
for (Iterator i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext();) {
ExceptionQueuedEvent event = i.next();
ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource();
Throwable t = context.getException();
if (t instanceof ViewExpiredException) {
ViewExpiredException vee = (ViewExpiredException) t;
FacesContext fc = FacesContext.getCurrentInstance();
Map requestMap = fc.getExternalContext().getRequestMap();
NavigationHandler nav = fc.getApplication().getNavigationHandler();
try {
requestMap.put("currentViewId", vee.getViewId());
nav.handleNavigation(fc, null, "Home");
fc.renderResponse();
} finally {
i.remove();
}
}
}
// At this point, the queue will not contain any ViewExpiredEvents.
// Therefore, let the parent handle them.
getWrapped().handle();
}
web.xml
javax.faces.application.ViewExpiredException
/home.xhtml