Чтобы создать общий обработчик исключений для всех непредвиденных исключений во время обработки BL, вы можете реализовать ExceptionHandlerFactory и указать его в face-config.xml:
<factory>
<exception-handler-factory>
my.package.ExceptionHandlerFactory
</exception-handler-factory>
</factory>
Это должно создать реализацию ExceptionHandler, которая, в свою очередь, реализует дескрипторМетод, например, одно исключение потребления (я думаю, что я взял его из ссылки JSF2 или аналогичного источника):
private static class MyExceptionHandler extends ExceptionHandlerWrapper {
private ExceptionHandler parent;
public WfExceptionHandler(ExceptionHandler parent) {
this.parent = parent;
}
@Override
public ExceptionHandler getWrapped() {
return this.parent;
}
@Override
public void handle() throws FacesException {
for (Iterator<ExceptionQueuedEvent> i =
getUnhandledExceptionQueuedEvents().iterator();
i.hasNext();) {
ExceptionQueuedEvent event = i.next();
i.remove();
ExceptionQueuedEventContext context =
(ExceptionQueuedEventContext) event.getSource();
Throwable t = context.getException();
myProcessing(t);
}
}
...
}
myProcessing (t) может получить управляемый бин, который выведет исключение на вашу консоль графического интерфейса, или вы можете простоиспользуйте FacesContext.getCurrentInstance (). addMessage ().Вам также потребуется вызвать FacesContext.getCurrentInstance (). RenderResponse (), чтобы обновить представление, поскольку необработанное исключение прервало жизненный цикл JSF.
В качестве альтернативы вы можете использовать try / catch во всех ваших методах управляемых компонентов и выполнить эквивалентmyProcessing (t) там.Разница в том, что ExceptionHandler также будет перехватывать исключения во время рендеринга страницы, которые не обязательно генерируются вашими классами.