FullAjaxExceptionHandler没有重定向到omnifaces 1.7上的错误页面

时间:2014-01-22 15:25:11

标签: jsf omnifaces exceptionhandler

我在使用Omnifaces的ajax请求上遇到FullAjaxExceptionHandler问题。

  • 环境:
  • Tomcat 7.0.50
  • Mojarra 2.1.27
  • Omnifaces 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上的错误?

提前致谢。

1 个答案:

答案 0 :(得分:1)

来自showcase page

  

请注意,错误页面必须是有效的Facelets页面!不支持JSP。

来自javadoc

  

此异常处理程序将解析web.xml和web-fragment.xml文件,以查找HTTP错误代码500的错误页面位置以及所有声明的特定异常类型。这些位置需要指向Facelets文件(不支持JSP)。

是时候从JSP转换为Facelets了。无论如何,JSP自2009年以来已被弃用。它适用于JSPX扩展,因为它可以被解析为好像它是一个Facelets文件(也是基于XML的)。