PWC1232:超过嵌套请求分派的最大深度:20 在 org.apache.catalina.core.ApplicationDispatcher.doInvoke

PWC1232: Exceeded maximum depth for nested request dispatches: 20 at org.apache.catalina.core.ApplicationDispatcher.doInvoke

我将 jsf 2.1 (mojara) 与 glassfish 3.1 一起使用,我的网站 .xml 看起来像:

  <welcome-file-list>
    <welcome-file>NewFile.xhtml</welcome-file>
  </welcome-file-list>
  <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>*.xhtml</url-pattern>
  </servlet-mapping>
  <context-param>

我遇到了这个错误

2015-03-11T21:40:15.054+0530|Warning: ApplicationDispatcher[/JSFProject] PWC1231: Servlet.service() for servlet Faces Servlet threw exception javax.servlet.ServletException: PWC1232: Exceeded maximum depth for nested request dispatches: 20 at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:772)

此问题表明您使用的是 JSF 1.x,而不是 JSF 2.x。 JSF 1.x 使用 JSP 作为默认视图技术,而 JSF 2.x 使用 Facelets 作为默认视图技术。而且,JSF 1.x 有一个已知错误 ("feature"),当它被映射到相同的后缀 URL 模式时,它的 FacesServlet 会 运行 进入无限循环物理视图文件。

事实上,您的 /WEB-INF/lib 包含以下绝对不属于那里的 JAR。 GlassFish 作为一个成熟的 Java EE 容器已经随 Servlet 和 JSF API/impl 开箱即用。

  • javax.servlet.jar(Servlet API;已由 GlassFish 提供!)
  • jsf-api.jar(Mojarra 1.x;GlassFish 已经提供 Mojarra 2.x!)
  • jsf-impl.jar(Mojarra 1.x;GlassFish 已经提供 Mojarra 2.x!)
  • myfaces-api-1.1.5.jar(MyFaces 1.x;GlassFish 已提供 Mojarra 2.x!)
  • myfaces-impl-1.1.5.jar(MyFaces 1.x;GlassFish 已提供 Mojarra 2.x!)

摆脱他们。即便如此,您也不应该在一个 webapp 中混合使用多个 JSF 实现。