PWC1232: превышена максимальная глубина для вложенных запросов: 20 в org.apache.catalina.core.ApplicationDispatcher.doInvoke
Я использую jsf 2.1 (мохара) с 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| Предупреждение: ApplicationDispatcher[/JSFProject] PWC1231: Servlet.service() для сервлета Faces Servlet выбросил исключение javax.servlet.ServletException: PWC1232: Превышена максимальная глубина для вложенных запросов: 20 at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:772)
1 ответ
Эта проблема предполагает, что вы используете JSF 1.x, а не JSF 2.x. JSF 1.x использует JSP в качестве технологии просмотра по умолчанию, тогда как JSF 2.x использует Facelets в качестве технологии просмотра по умолчанию. И, JSF 1.x имеет известную ошибку ("особенность"), что его FacesServlet
будет выполняться в бесконечном цикле, когда он сопоставляется с тем же шаблоном URL суффикса, что и файл физического представления.
И действительно, ваш /WEB-INF/lib
содержит, помимо прочего, следующие JAR-файлы, которые там абсолютно не принадлежат. GlassFish, как полноценный контейнер Java EE, уже поставляется с Servlet и JSF API.
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!)
Избавься от них. Даже в этом случае не следует смешивать несколько реализаций JSF в одном веб-приложении.