gpt4 book ai didi

richfaces - tomcat 6.0 上的 JSF2 和 Richfaces 3.3.3 应用程序崩溃并出现 StackOverflowError

转载 作者:行者123 更新时间:2023-12-02 23:07:17 27 4
gpt4 key购买 nike

我正在将 JSF 2 和 richfaces 3.3.3 用于托管在 tomcat 6.0.20 上的应用程序。一旦通过浏览器(Mozilla 和 IE)发出请求,应用程序就会崩溃。

我的 web.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">

<display-name>TestJSF</display-name>

<welcome-file-list>
<welcome-file>pages/login.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>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.SKIN</param-name>
<param-value>blueSky</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.CONTROL_SKINNING</param-name>
<param-value>enable</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>

<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>

<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>

</web-app>

异常(exception)是

    javax.servlet.ServletException: Servlet execution threw an exception
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:530)
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:542)
com.sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView(JspViewHandlingStrategy.java:359)
com.sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.java:150)
com.sun.faces.application.view.JspViewHandlingStrategy.renderView(JspViewHandlingStrategy.java:190)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)

以此递归方式记录堆栈跟踪,直到发生 StackOverflowError。

如果我删除所有与 Richfaces 相关的配置,该应用程序就会像魅力一样工作。非常感谢任何建议。

最佳答案

对于初学者,请更改此部分...

<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

faces servlet 应该映射到 .jsf,或者只是/faces/。然后禁用 JSF2 内置的 faces servlet...

<context-param>
<param-name>javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER</param-name>
<param-value>true</param-value>
</context-param>

现在包括原始的facelets jar...它应该类似于版本 1.1.15 或其他版本。这里发生的事情是,JSF 1.x 没有专门的 View 技术,尽管大多数人使用 JSP,但它有一些严重的缺点。因此,facelets 作为专用 View 技术集成到 JSF2 中。问题是 RichFaces 3.x 尚未完全支持 JSF2,特别是它仍然依赖于独立的 Facelets 项目。因此,您必须禁用内置的facelets,并包含独立版本的facelets。或者,RichFaces4 刚刚与 Milestone 5 一起发布,它非常接近候选版本(然后是稳定版本),并且它应该与 JSF2 完全集成

关于richfaces - tomcat 6.0 上的 JSF2 和 Richfaces 3.3.3 应用程序崩溃并出现 StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4093691/

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