我在 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 中定义的错误页面。 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">
)如果我更改它以使页面不再使用模板,然后只需添加模板中的所有代码,它就可以正常工作。