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

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

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

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, Вы можете найти полный исходный код здесь и пример витрины здесь.

Смотрите также:

Другие вопросы по тегам