Подтвердить что ты не робот

Каков правильный способ справиться с исключениями JSF 2.0 для компонентов AJAXified?

Я установил web.xml так, чтобы все, что java.lang.Throwable(т.е. любые неперехваченные исключения или ошибки) пересылаются на страницу с ошибкой. Однако для компонентов AJAXified исключения не попадают на страницу с ошибкой через этот механизм.

В тестовом случае у меня есть простой CommandButton связанный с методом действий, который всегда выдает RuntimeException. Похоже, что лучшей практикой было бы, чтобы метод действия уловил исключение и добавлял FacesMessage степень серьезности ошибки. Это то, что люди делают? Есть ли способ настроить JSF, чтобы, если компонент AJAXified, поддерживающий bean, создает исключение, которое может отображаться на странице с ошибкой?

4b9b3361

Ответ 1

Вам нужно реализовать пользовательский ExceptionHandler, который делает в основном следующее, когда исключение возникает в запросе ajax:

String errorPageLocation = "/WEB-INF/errorpages/500.xhtml";
context.setViewRoot(context.getApplication().getViewHandler().createView(context, errorPageLocation));
context.getPartialViewContext().setRenderAll(true);
context.renderResponse();

Это не совсем тривиально, если вы хотите учитывать страницы ошибок web.xml. Для этого вам нужно проанализировать весь web.xml, чтобы найти места страницы ошибок. Кроме того, когда исключение возникло во время ответа рендеринга, вам в основном нужно будет перестроить все представление самостоятельно. В библиотеке компонентов OmniFaces имеется именно такой обработчик исключений, FullAjaxExceptionHandler. Вы можете найти полный исходный код здесь и пример витрины здесь.

См. также: