Я реализую ExceptionHandlerFactory для обработки непредвиденных ошибок в моем приложении после документации JSF 2.0 https://cwiki.apache.org/confluence/display/MYFACES/Handling+Server+Errors. Реализация хорошо работает для большинства сценариев. Однако, когда я отключу свою базу данных, произошло несколько ошибок, и инициализация генерирует несколько исключений для подключения, таких как java.sql.SQLException, исключения в спящем режиме, исключения для боба и т. Д. Метод handle() выполняется несколько раз и перенаправляется на страницу с ошибкой много раз. Код ручки ниже:Как справиться с несколькими неожиданными исключениями JSF?
public void handle() throws FacesException {
final Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator();
while (i.hasNext()) {
ExceptionQueuedEvent event = i.next();
ExceptionQueuedEventContext context =
(ExceptionQueuedEventContext) event.getSource();
// get the exception from context
Throwable t = context.getException();
final FacesContext fc = FacesContext.getCurrentInstance();
final Map<String, Object> requestMap = fc.getExternalContext().getRequestMap();
final NavigationHandler nav = fc.getApplication().getNavigationHandler();
//here you do what ever you want with exception
try {
//log error ?
log.log(Level.SEVERE, "Critical Exception!", t);
//redirect error page
requestMap.put("exceptionMessage", t.getMessage());
nav.handleNavigation(fc, null, "/error");
fc.renderResponse();
// remove the comment below if you want to report the error in a jsf error message
//JsfUtil.addErrorMessage(t.getMessage());
} finally {
//remove it from queue
i.remove();
}
}
//parent hanle
getWrapped().handle();
}
Я вижу более 15 запросов к странице ошибок в консоли отладки Firefox. Каков наилучший способ предотвратить множественные перенаправления? Спасибо.