2010-11-04 2 views
3

Я использую JSF 2 и richfaces 3.3.3 для приложения, размещенного на tomcat 6.0.20. Приложение вылетает, как только запрос выполняется через браузер (Mozilla и IE).Приложение JSF2 и Richfaces 3.3.3 на tomcat 6.0 с StackOverflowError

Моя 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 occurrs.

Если я удалю все конфигурации, связанные с Richfaces, приложение работает как шарм. Любые советы очень ценятся.

ответ

1

Я использую 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> 

Все работает, как ожидалось.

2

Для начала, изменить этот раздел ...

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

граней сервлет должен быть отображен в .jsf, или просто/лиц/. Затем отключить рожи сервлет, который предопределённые к JSF2 ...

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

А теперь включают в себя оригинальную Facelets банку ... она должна быть версии 1.1.15 или что-то. Что здесь происходит, так это то, что JSF 1.x не обладает специальной технологией просмотра, и, несмотря на то, что большинство людей используют JSP, у него были некоторые серьезные недостатки. В результате фишки были интегрированы в JSF2 как специальная технология просмотра. Проблема в том, что RichFaces 3.x еще не полностью поддерживает JSF2, в частности, он все еще имеет зависимость от проекта независимых гигантов. Таким образом, вы должны отключить встроенные фишки и включить независимую версию facelets. Альтернативно, RichFaces4 только что вышел с Milestone 5, который действительно близок к выпуску Candidate (и затем стабильной сборки), и он должен быть полностью интегрирован с JSF2

1

Есть ли причина, по которой вы используете JSF 2 и RichFaces 3.3. 3? Для JSF 2 вы должны использовать RichFaces 4.

Смежные вопросы