我对使用 Omnifaces 的 ajax 请求的 FullAjaxExceptionHandler 有疑问。
- 环境:
- 雄猫 7.0.50
- 莫哈拉 2.1.27
- 全方位 1.7
我在 web.xml 中声明了错误页面:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error/errorPage.jsf</location>
</error-page>
<filter>
<filter-name>facesExceptionFilter</filter-name>
<filter-class>org.omnifaces.filter.FacesExceptionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>facesExceptionFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
我在 faces-config.xml 上声明了异常处理程序
<factory>
<exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
</factory>
在这种环境下,当在非 ajax 请求的 @PostConstruct 方法上抛出异常时,错误页面会正确显示。当我在 ajax 请求上引发异常时,未显示错误页面,但我看到了此日志消息。
FullAjaxExceptionHandler: An exception occurred during processing JSF ajax request. Error page '/error/errorPage.jsf' will be shown.
过了一会儿,我看到另一条日志消息,浏览器打开“硬编码错误页面”。
FullAjaxExceptionHandler: Well, another exception occurred during rendering error page '/error/erroPage.jsf'. Trying to render a hardcoded error page now.
javax.faces.FacesException: org.apache.jasper.JasperException: /error/errorPage.jspx (line: 11, column: 39) Attribute "xmlns:h" must be declared for element type "html".
JSP 似乎正在尝试呈现 JSF 页面。如果我将错误页面声明更改为:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error/errorPage.jspx</location>
</error-page>
ajax 请求正确重定向到我的页面,但非 ajax 请求不再重定向到错误页面。
那么,这是配置问题、环境问题还是 Omnifaces 上的错误?
提前致谢。