Я использую JSF 2.0 с Facelets на сервере приложений Java EE 6 (GlassFish v3).Я настроил страницу ошибки для исключений в файле web.xml:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error-all.xhtml</location>
</error-page>
Это тестовая страница /error-all.xhtml
:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
template="/resources/templates/decorator.xhtml">
<ui:define name="title">Title</ui:define>
<ui:define name="body">
<h1>Body</h1>
</ui:define>
</ui:composition>
Я реализовал управляемый компонент, который выдает исключение RuntimeExceptionнарочно, когда я нажимаю на одну из моих командных ссылок.Когда это происходит, отображается содержимое страницы /error-all.xhtml, но она не получает процессы по Facelets, поэтому template = "/ resources / templates / decorator.xhtml" нетприменяется.
Используя Google Chrome, я вижу только «Заголовок» и «Тело» без макета в качестве результата.Если я попрошу Chrome проверить элементы, я получу полный исходный код, который включает теги ui :position и ui: define , которые Chrome, очевидно, не понимает.Это подтверждает мою теорию, что страница Facelets не обрабатывается.
Итак, мой вопрос, как это исправить?Как сделать так, чтобы страница ошибки обрабатывалась и возвращала HTML-код, являющийся результатом комбинации шаблона с содержимым страницы ошибки?