Java EE 6 アプリケーション サーバー (GlassFish v3) で Facelets を使用して JSF 2.0 を使用しています。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>
commandLinks の 1 つをクリックすると、意図的に RuntimeException をスローするマネージド Bean を実装しました。その際、/error-all.xhtml ページの内容が表示されますが、Facelets による処理が取得されないため、template="/resources/templates/decorator.xhtml"は適用されません。
Google Chrome を使用すると、「タイトル」と「本文」のみが表示され、レイアウトは表示されません。Chrome に要素の検査を依頼すると、完全なソース コードが取得されます。このソース コードには、Chrome が明らかに理解できないui:compositionタグとui:defineタグが含まれています。これは、Facelets ページが処理されていないという私の理論を裏付けるものです。
それで、私の質問は、これを修正する方法ですか?エラー ページが処理され、テンプレートとエラー ページのコンテンツを組み合わせた結果である HTML コードを返すようにするにはどうすればよいですか?