【问题标题】:JSF2 and Richfaces 3.3.3 application on tomcat 6.0 crashes with a StackOverflowErrorTomcat 6.0 上的 JSF2 和 Richfaces 3.3.3 应用程序崩溃并出现 StackOverflowError
【发布时间】:2011-05-04 20:50:32
【问题描述】:

我正在将 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>

例外是

    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 相关的配置,应用程序就会像魅力一样工作。 非常感谢任何建议。

【问题讨论】:

    标签: richfaces jsf-2 tomcat6


    【解决方案1】:

    您使用 JSF 2 和 RichFaces 3.3.3 有什么原因吗?对于 JSF 2,您应该使用 RichFaces 4。

    【讨论】:

      【解决方案2】:

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

      <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 没有专门的视图技术,尽管大多数人使用 JSP,但它有一些严重的缺点。因此,facelets 被集成到 JSF2 中作为专用的视图技术。问题是 RichFaces 3.x 还没有完全支持 JSF2,特别是它仍然依赖于独立的 facelets 项目。因此,您必须禁用内置的 facelets,并包含独立版本的 facelets。或者,RichFaces4 刚刚发布了 Milestone 5,它非常接近候选版本(然后是稳定版本),它应该与 JSF2 完全集成

      【讨论】:

        【解决方案3】:

        我正在使用具有以下配置的 JSF 2.0 和 Richfaces 3.3.3.Final:

        <?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>Working JSF2/Richfaces3.3 Config</display-name>
        
            <context-param>
                <param-name>javax.faces.PROJECT_STAGE</param-name>
                <param-value>Production</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>org.apache.myfaces.config.annotation.LifecycleProvider</param-name>
                <param-value>org.apache.myfaces.config.annotation.NoInjectionAnnotationLifecycleProvider</param-value>
            </context-param>
            <context-param>
                <param-name>org.apache.myfaces.SECRET</param-name>
                <param-value>NzY1NDMyMTA=</param-value>
            </context-param>
            <context-param>
                <param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
                <param-value>false</param-value>
            </context-param>    
            <context-param>
                <param-name>facelets.DEVELOPMENT</param-name>
                <param-value>false</param-value>
            </context-param>
            <context-param>
                <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
                <param-value>true</param-value>
            </context-param>    
            <context-param>
                <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
                <param-value>server</param-value>
            </context-param>
            <context-param>
                <param-name>com.sun.faces.validateXml</param-name>
                <param-value>true</param-value>
            </context-param>
            <context-param>
                <param-name>com.sun.faces.verifyObjects</param-name>
                <param-value>false</param-value>
            </context-param>
            <context-param>
                <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
                <param-value>com.sun.facelets.FaceletViewHandler</param-value>
            </context-param>
            <context-param>
                <param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
                <param-value>true</param-value>
            </context-param>
            <context-param>
                <param-name>org.ajax4jsf.COMPRESS_STYLE</param-name>
                <param-value>true</param-value>
            </context-param>
            <context-param>
                <param-name>org.ajax4jsf.xmlparser.ORDER</param-name>
                <param-value>TIDY</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>org.richfaces.LoadStyleStrategy</param-name>
                <param-value>NONE</param-value>
            </context-param>
            <context-param>
                <param-name>org.richfaces.LoadScriptStrategy</param-name>
                <param-value>ALL</param-value>
            </context-param>
            <context-param>
                <param-name>javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER</param-name>
                <param-value>true</param-value>
            </context-param>
        
            <servlet>
                <servlet-name>Faces Servlet</servlet-name>
                <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            </servlet>
            <servlet-mapping>
                <servlet-name>Faces Servlet</servlet-name>
                <url-pattern>*.jsf</url-pattern>
            </servlet-mapping>
        
            <filter>
                <display-name>Ajax4jsf Filter</display-name>
                <filter-name>ajax4jsf</filter-name>
                <filter-class>org.ajax4jsf.Filter</filter-class>
                <init-param>
                    <param-name>createTempFiles</param-name>
                    <param-value>true</param-value>
                </init-param>
                <init-param>
                    <param-name>forceparser</param-name>
                    <param-value>false</param-value>
                </init-param>
                <init-param>
                    <param-name>enable-cache</param-name>
                    <param-value>true</param-value>
                </init-param>        
            </filter>
            <filter-mapping>
                <filter-name>ajax4jsf</filter-name>
                <servlet-name>Faces Servlet</servlet-name>
                <url-pattern>*.jsf</url-pattern>
                <dispatcher>REQUEST</dispatcher>
                <dispatcher>FORWARD</dispatcher>
                <dispatcher>INCLUDE</dispatcher>
            </filter-mapping>
        
            <welcome-file-list>
                <welcome-file>index.jsp</welcome-file>
            </welcome-file-list>
        </web-app>
        

        一切都按预期工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-03
          • 2011-02-20
          • 2019-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-25
          相关资源
          最近更新 更多