gpt4 book ai didi

jsf - 使用 Facelets 而不是 JSP 会导致 javax.servlet.http.HttpServletRequestWrapper.getSession() 处的 java.lang.StackOverflowError

转载 作者:行者123 更新时间:2023-12-04 05:42:31 31 4
gpt4 key购买 nike

我在 Eclipse IDE 中使用 JBoss4.2。当我运行 hellojsf程序使用JSP View 技术,运行良好。当我尝试使用相同组件的 Facelets 时,出现以下异常:

2012-06-20 12:41:30,941 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/HelloJSF].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
java.lang.StackOverflowError
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)

这是怎么引起的,我该如何解决?

最佳答案

FacesServlet一直在无限循环中运行。如果您使用旧的 JSF 1.2 而不是新的 JSF 2.x 并且没有正确配置 JSF 以使用 XHTML 而不是 JSP,就会发生这种情况。 JSF 1.2 不支持 Facelets,而 JSF 2.x 捆绑了 Facelets。
upgrading到 JSF 2.0 不是一个选项(JBoss 4.2 作为 Servlet 2.5 兼容容器应该支持它),那么您需要单独安装 Facelets 1.x。下载jsf-facelets-1.1.15.jar并将其放入 /WEB-INF/lib并编辑 web.xml告诉 JSF 使用 .xhtml作为默认后缀。

<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
FacesServlet映射 URL 模式必须 不是 *.xhtml ,这将导致它无限循环运行。留着吧 *.jsf .
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
此外不要忘记在 faces-config.xml 中配置 Facelets View 处理程序.
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
现在您可以通过 http://localhost:8080/context/page.jsf 以通常的方式打开 Facelets 文件就像您用于 JSP 文件一样,唯一的区别是您应该有一个 page.xhtml文件而不是 page.jsp .
使用 JSF 2.x 时,上下文参数和 View 处理程序是不必要的,因为它们已经是 JSF 2.x 的默认值。同样在使用 JSF 2.x 时,URL 模式可以安全地设置为 *.xhtml .
另见:
  • Facelets 1.x developer documentation
  • Migrating from JSF 1.2 to JSF 2.0
  • 关于jsf - 使用 Facelets 而不是 JSP 会导致 javax.servlet.http.HttpServletRequestWrapper.getSession() 处的 java.lang.StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114723/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com