Я использую OmniFaces (1.7) FullAjaxExceptionHandler для обработки (ViewExpired) Исключение во время запросов ajax.Переопределение метода logException для OmniFaces FullAjaxExceptionHandler не вызывается
Я не хочу, чтобы FullAjaxExceptionHandler регистрировал исключение с уровнем SEVERE, как это делает реализация по умолчанию. Поэтому я переопределил метод logException, но по-прежнему вызывается метод по умолчанию, а не переопределенный.
Я зарегистрировал следующие заводы:
<factory>
<exception-handler-factory>my.package.ViewExpiredExceptionHandlerFactory</exception-handler-factory>
</factory>
<factory>
<exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
</factory>
Вот мой ViewExpiredExceptionHandlerFactory
public class ViewExpiredExceptionHandlerFactory extends ExceptionHandlerFactory {
private ExceptionHandlerFactory parent;
public ViewExpiredExceptionHandlerFactory(ExceptionHandlerFactory parent) {
this.parent = parent;
}
@Override
public ExceptionHandler getExceptionHandler() {
ExceptionHandler result = parent.getExceptionHandler();
result = new ViewExpiredExceptionHandler(result);
return result;
}
}
и расширенный FullAjaxExceptionHandler
public class ViewExpiredExceptionHandler extends FullAjaxExceptionHandler {
private static final Logger LOGGER = Logger.getLogger(ViewExpiredExceptionHandler.class);
private ExceptionHandler wrapped;
public ViewExpiredExceptionHandler(ExceptionHandler wrapped) {
super(wrapped);
this.wrapped = wrapped;
}
@Override
public ExceptionHandler getWrapped() {
return this.wrapped;
}
@Override
public void logException(FacesContext context, Throwable exception, String location, String message, Object... parameters) {
String user = UserFilter.readUserIdFromSession();
LOGGER.info("The view/session has expired for user " + (user == null ? "null" : user));
}
}
Я что-то пропустил?
Очень логика и теперь :-) Спасибо BalusC работает отлично. – jimmybondy
Добро пожаловать. – BalusC
Еще один вопрос: я предполагаю, что нет необходимости указывать браузеру не кэшировать динамические JSF-страницы, как описано здесь http://stackoverflow.com/questions/3642919/javax-faces-application-viewexpiredexception-view-could -не-восстанавливается/3642969 # 3642969, правильно? – jimmybondy