web.xml で次のように定義しています。
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/shared/errors/DefaultErrorPage.xhtml</location>
</error-page>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/shared/errors/ViewExpired.xhtml</location>
</error-page>
また、faces-config.xml で Omnifaces の FullAjaxExceptionHandler を使用しています。
<factory>
<exception-handler-factory>
org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory
</exception-handler-factory>
</factory>
FullAjaxExceptionHandler は ajax 呼び出しに対して正常に動作していますが、ページを直接ヒットしてエラーが発生すると、移動しようとしていたページのレンダリングが開始されますが、終了せず、Web で定義されたエラー ページが表示されます。 xml がレンダリングされ、部分的にレンダリングされたページの後にエラー ページが埋め込まれます。
(私は Mojarra JSF 2.1.3 を含む Glassfish 3.1.1 を使用しています) 編集: 現在、Glassfish 3.1.2.2 および JSF 2.1.11 を使用しています
編集: 次のことを発見しました: エラーが発生しているページはテンプレートを使用しています ( <ui:composition template="/shared/shared/commonLayout.xhtml">
) ページがテンプレートを使用しないように変更し、テンプレートからすべてのコードを追加するだけで、正常に動作します。