1

我对使用 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 上的错误?

提前致谢。

4

1 回答 1

1

展示页面

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

javadoc

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

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

于 2014-01-22T19:08:55.007 回答