Menu

4.0 RC1 : doesn't load phase-listener

Users
Gonzalad
2007-01-24
2013-04-08
  • Gonzalad

    Gonzalad - 2007-01-24

    Hello,

    I'm trying to user JSF-Spring 4.0 RC1 servlet de.mindmatters.faces.spring.context.servlet.FacesDispatcherServlet (just replaced
    MyFaces servlet with JSF-Spring servlet).

    This servlet doesn't seem to load any phase-listener embedded in faces-config.xml files located in some jars in WEB-INF/lib.

    I've even tried to specify phase-listener in WEB-INF/faces-config.xml, but no way.

    There's no stack trace, but when I activate debugger on method de.mindmatters.faces.lifecycle.LifecycleImpl#executePhase, I see
    member listener.size()==0.

    Has anyone had this problem ?

    Here is my configuration for faces-confiog.xml & web.xml & faces-servlet.xml (quite long !).

    In my sample, the phase listener is org.exadel.jsf.PhaseTracker.

    faces-config.xml :
    <?xml version="1.0"?>
    <!DOCTYPE faces-config SYSTEM "web-facesconfig_1_1.dtd">

    <faces-config>
        <!-- Spring VariableResolver for JSF -->
        <application>
            <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
            <locale-config>
              <default-locale>en</default-locale>
              <supported-locale>en</supported-locale>
              <supported-locale>es</supported-locale>
              <supported-locale>de</supported-locale>
              <supported-locale>fr</supported-locale>
              <supported-locale>nl</supported-locale>
              <supported-locale>pt_BR</supported-locale>
              <supported-locale>zh_CN</supported-locale>
            </locale-config>
            <message-bundle>ApplicationResources</message-bundle>
        </application>

        <component>
            <component-type>net.sf.jsfcomp.acegijsf.Authorize</component-type>
            <component-class>net.sf.jsfcomp.acegijsf.Authorize</component-class>
        </component>

        <component>
            <component-type>net.sf.jsfcomp.acegijsf.Authentication</component-type>
            <component-class>net.sf.jsfcomp.acegijsf.Authentication</component-class>
        </component>

        <component>
            <component-type>com.corejsf.validator.UIValidatorScript</component-type>
            <component-class>com.corejsf.validator.UIValidatorScript</component-class>
        </component>

        <navigation-rule>
            <from-view-id>/mainMenu.jsp</from-view-id>
            <navigation-case>
                <from-action>ajax4jsf</from-action>
                <to-view-id>/ajax4jsf.jsp</to-view-id>
            </navigation-case>
        </navigation-rule>
    <!--
        <navigation-rule>
            <from-view-id>/*</from-view-id>
            <navigation-case>
                <from-action>selectFile</from-action>
                <to-view-id>/selectFile.jsp</to-view-id>
            </navigation-case>
        </navigation-rule>
    -->
         <navigation-rule>
            <from-view-id>/*</from-view-id>
            <navigation-case>
                <from-outcome>mainMenu</from-outcome>
                <to-view-id>/mainMenu.jsp</to-view-id>
                <redirect/>
            </navigation-case>
        </navigation-rule>
        <navigation-rule>
            <from-view-id>/*</from-view-id>
            <navigation-case>
                <from-outcome>editProfile</from-outcome>
                <to-view-id>/userForm.jsp</to-view-id>
            </navigation-case>
        </navigation-rule>
        <navigation-rule>
            <from-view-id>/userList.jsp</from-view-id>
            <navigation-case>
                <from-outcome>add</from-outcome>
                <to-view-id>/userForm.jsp</to-view-id>
            </navigation-case>
        </navigation-rule>
        <navigation-rule>
            <from-view-id>/userForm.jsp</from-view-id>
            <navigation-case>
                <from-outcome>cancel</from-outcome>
                <to-view-id>/userList.jsp</to-view-id>
                <redirect/>
            </navigation-case>
            <navigation-case>
                <from-outcome>list</from-outcome>
                <to-view-id>/userList.jsp</to-view-id>
                <redirect/>
            </navigation-case>
        </navigation-rule>
        <navigation-rule>
            <from-view-id>/selectFile.jsp</from-view-id>
            <navigation-case>
                <from-outcome>success</from-outcome>
                <to-view-id>/showFile.jsp</to-view-id>
            </navigation-case>
        </navigation-rule>
        <navigation-rule>
            <from-view-id>/signup.jsp</from-view-id>
            <navigation-case>
                <from-outcome>cancel</from-outcome>
                <to-view-id>/login.jsp</to-view-id>
                <redirect/>
            </navigation-case>
        </navigation-rule>
        <navigation-rule>
            <from-view-id>/passwordHint.jsp</from-view-id>
            <navigation-case>
                <from-outcome>success</from-outcome>
                <to-view-id>/login.jsp</to-view-id>
                <redirect/>
            </navigation-case>
        </navigation-rule>
        <!--Portefeuille-NAV-START-->
        <navigation-rule>
            <from-view-id>/portefeuille/portefeuilles.xhtml</from-view-id>
            <navigation-case>
                <from-outcome>add</from-outcome>
                <to-view-id>/portefeuille/portefeuilleForm.xhtml</to-view-id>
            </navigation-case>
            <navigation-case>
                <from-outcome>edit</from-outcome>
                <to-view-id>/portefeuille/portefeuilleForm.xhtml</to-view-id>
            </navigation-case>
        </navigation-rule>
        <navigation-rule>
            <from-view-id>/portefeuille/portefeuilleForm.xhtml</from-view-id>
            <navigation-case>
                <from-outcome>cancel</from-outcome>
                <to-view-id>/portefeuille/portefeuilles.xhtml</to-view-id>
                <redirect/>
            </navigation-case>
            <navigation-case>
                <from-outcome>list</from-outcome>
                <to-view-id>/portefeuille/portefeuilles.xhtml</to-view-id>
                <redirect/>
            </navigation-case>
        </navigation-rule>
        <!--Portefeuille-NAV-END-->
        <!-- Add additional rules here -->

       
        <managed-bean>
            <managed-bean-name>basePage</managed-bean-name>
            <managed-bean-class>org.firsttest.webapp.action.BasePage</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
        </managed-bean>
       
        <managed-bean>
            <managed-bean-name>userList</managed-bean-name>
            <managed-bean-class>org.firsttest.webapp.action.UserList</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
            <managed-property>
                <property-name>userManager</property-name>
                <value>#{userManager}</value>
            </managed-property>
        </managed-bean>
       
        <managed-bean>
            <managed-bean-name>userForm</managed-bean-name>
            <managed-bean-class>org.firsttest.webapp.action.UserForm</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
            <managed-property>
              <property-name>username</property-name>
              <value>#{param.username}</value>
            </managed-property>
            <managed-property>
                <property-name>userManager</property-name>
                <value>#{userManager}</value>
            </managed-property>
            <managed-property>
                <property-name>roleManager</property-name>
                <value>#{roleManager}</value>
            </managed-property>
            <managed-property>
                <property-name>mailEngine</property-name>
                <value>#{mailEngine}</value>
            </managed-property>
            <managed-property>
                <property-name>message</property-name>
                <value>#{mailMessage}</value>
            </managed-property>
            <managed-property>
                <property-name>templateName</property-name>
                <value>accountCreated.vm</value>
            </managed-property>
        </managed-bean>
       
        <managed-bean>
            <managed-bean-name>signupForm</managed-bean-name>
            <managed-bean-class>org.firsttest.webapp.action.SignupForm</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
            <managed-property>
                <property-name>userManager</property-name>
                <value>#{userManager}</value>
            </managed-property>
            <managed-property>
                <property-name>roleManager</property-name>
                <value>#{roleManager}</value>
            </managed-property>
            <managed-property>
                <property-name>mailEngine</property-name>
                <value>#{mailEngine}</value>
            </managed-property>
            <managed-property>
                <property-name>message</property-name>
                <value>#{mailMessage}</value>
            </managed-property>
            <managed-property>
                <property-name>templateName</property-name>
                <value>accountCreated.vm</value>
            </managed-property>
        </managed-bean>
       
        <managed-bean>
            <managed-bean-name>passwordHint</managed-bean-name>
            <managed-bean-class>org.firsttest.webapp.action.PasswordHint</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
            <managed-property>
              <property-name>username</property-name>
              <value>#{param.username}</value>
            </managed-property>
            <managed-property>
                <property-name>userManager</property-name>
                <value>#{userManager}</value>
            </managed-property>
            <managed-property>
                <property-name>mailEngine</property-name>
                <value>#{mailEngine}</value>
            </managed-property>
            <managed-property>
                <property-name>message</property-name>
                <value>#{mailMessage}</value>
            </managed-property>
            <managed-property>
                <property-name>templateName</property-name>
                <value>accountCreated.vm</value>
            </managed-property>
        </managed-bean>
       
        <managed-bean>
            <managed-bean-name>fileUpload</managed-bean-name>
            <managed-bean-class>org.firsttest.webapp.action.FileUpload</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
        </managed-bean>
       
        <managed-bean>
            <managed-bean-name>reload</managed-bean-name>
            <managed-bean-class>org.firsttest.webapp.action.Reload</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
        </managed-bean>
       
        <managed-bean>
            <managed-bean-name>activeUserList</managed-bean-name>
            <managed-bean-class>org.firsttest.webapp.action.ActiveUserList</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
        </managed-bean>
       
        <!--Portefeuille-BEAN-START-->
        <managed-bean>
            <managed-bean-name>portefeuilleList</managed-bean-name>
            <managed-bean-class>org.firsttest.portefeuille.webapp.action.PortefeuilleList</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
            <managed-property>
                <property-name>portefeuilleManager</property-name>
                <value>#{portefeuilleManager}</value>
            </managed-property>
        </managed-bean>

        <managed-bean>
            <managed-bean-name>portefeuilleForm</managed-bean-name>
            <managed-bean-class>org.firsttest.portefeuille.webapp.action.PortefeuilleForm</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
            <managed-property>
                <property-name>id</property-name>
                <value>#{param.id}</value>
            </managed-property>
            <managed-property>
                <property-name>portefeuilleManager</property-name>
                <value>#{portefeuilleManager}</value>
            </managed-property>
        </managed-bean>
        <!--Portefeuille-BEAN-END-->
        <!-- Add additional beans here -->

       
        <render-kit>
            <description>Some replacements for the standard renderers</description>
            <renderer>
                <description>Replacement renderer for h:outputLabel</description>
                <component-family>javax.faces.Output</component-family>
                <renderer-type>javax.faces.Label</renderer-type>
                <renderer-class>org.firsttest.webapp.jsf.LabelRenderer</renderer-class>
            </renderer>
            <renderer>
                <description>Replacement renderer for h:panelGrid that uses lists instead of tables</description>
                <component-family>javax.faces.Panel</component-family>
                <renderer-type>javax.faces.Grid</renderer-type>
                <renderer-class>org.firsttest.webapp.jsf.PanelGridRenderer</renderer-class>
            </renderer>
        </render-kit>

        <!--lifecycle>
          <phase-listener>org.apache.shale.view.faces.ViewPhaseListener</phase-listener>
        </lifecycle-->

       <lifecycle>
          <phase-listener>org.exadel.jsf.PhaseTracker</phase-listener>
       </lifecycle>

        <validator>
            <validator-id>com.corejsf.validator.CommonsValidator</validator-id>
            <validator-class>com.corejsf.validator.CommonsValidator</validator-class>
        </validator>

    </faces-config>

    web.xml :
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>
        <display-name>firsttest</display-name>

        <!-- precompiled jsp mappings -->

        <!-- Define the default CSS Theme -->
        <context-param>
            <param-name>csstheme</param-name>
            <param-value>simplicity</param-value>
        </context-param>
        <!-- Define the basename for a resource bundle for I18N -->
        <context-param>
            <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
            <param-value>ApplicationResources</param-value>
        </context-param>
        <!-- Fallback locale if no bundles found for browser's preferred locale -->
        <!-- Force a single locale using param-name 'javax.servlet.jsp.jstl.fmt.locale' -->
        <context-param>
            <param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
            <param-value>en</param-value>
        </context-param>
        <!-- Context Configuration locations for Spring XML files -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext-*.xml,/WEB-INF/security.xml</param-value>
        </context-param>
    <!--
        <context-param>
            <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
            <param-value>com.sun.facelets.FaceletViewHandler</param-value>
        </context-param>
    -->

        <!-- JSF related config -->
        <context-param>
            <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
            <param-value>client</param-value>
            <description>
            State saving method: "client" or "server" (= default).
            See JSF Specification 2.5.2
            </description>
        </context-param>
        <context-param>
            <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
            <param-value>.jsp</param-value>
        </context-param>
       <context-param>
           <param-name>myfaces_allow_javascript</param-name>
           <param-value>true</param-value>
           <description>
               This parameter tells MyFaces if javascript code should be allowed in the
               rendered HTML output.
               If javascript is allowed, command_link anchors will have javascript code
               that submits the corresponding form.
               If javascript is not allowed, the state saving info and nested parameters
               will be added as url parameters.
               Default: "true"
           </description>
       </context-param>
       <context-param>
           <param-name>myfaces_pretty_html</param-name>
           <param-value>true</param-value>
           <description>
               If true, rendered HTML code will be formatted, so that it is "human readable".
               i.e. additional line separators and whitespace will be written, that do not
               influence the HTML code.
               Default: "true"
           </description>
       </context-param>
       <context-param>
          <param-name>org.apache.myfaces.COMPRESS_STATE_IN_CLIENT</param-name>
          <param-value>true</param-value>
          <description>
             Use this context parameter to enable compression in MyFaces version 1.1.4 and later.
          </description>
       </context-param>
       <context-param>
            <param-name>org.exadel.helper.phaseTracker.cphase</param-name>
            <param-value>ANY_PHASE</param-value>
            <description>Loggue les phase JSF - a commenter en prod</description>
        </context-param>

        <!-- Tiles related config -->
        <context-param>
            <param-name>definitions-config</param-name>
            <param-value>/WEB-INF/tiles-defs.xml</param-value>
            <description>Fichier de configuration Tiles</description>
        </context-param>

        <filter>
            <filter-name>ajax4jsf</filter-name>
            <filter-class>org.ajax4jsf.Filter</filter-class>
        </filter>
        <filter>
            <filter-name>securityFilter</filter-name>
            <filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
            <init-param>
                <param-name>targetBean</param-name>
                <param-value>filterChainProxy</param-value>
            </init-param>
        </filter>
        <filter>
            <filter-name>cacheFilter</filter-name>
            <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
        </filter>
        <filter>
            <filter-name>clickstreamFilter</filter-name>
            <filter-class>com.opensymphony.clickstream.ClickstreamFilter</filter-class>
        </filter>
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter>
            <filter-name>hibernateFilter</filter-name>
            <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        </filter>
        <filter>
            <filter-name>rewriteFilter</filter-name>
            <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
            <init-param>
                <param-name>logLevel</param-name>
                <param-value>commons</param-value>
            </init-param>
        </filter>
        <filter>
            <filter-name>exportFilter</filter-name>
            <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
        </filter>
        <filter>
            <filter-name>extensionsFilter</filter-name>
            <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
            <init-param>
                <param-name>maxFileSize</param-name>
                <param-value>2m</param-value>
            </init-param>
        </filter>
        <filter>
            <filter-name>gzipFilter</filter-name>
            <filter-class>net.sf.ehcache.constructs.web.filter.GzipFilter</filter-class>
        </filter>
        <filter>
            <filter-name>messageFilter</filter-name>
            <filter-class>org.firsttest.webapp.filter.MessageFilter</filter-class>
        </filter>
        <filter>
            <filter-name>localeFilter</filter-name>
            <filter-class>org.firsttest.webapp.filter.LocaleFilter</filter-class>
        </filter>
        <filter>
            <filter-name>SysoutFilter</filter-name>
            <display-name>SysoutFilter</display-name>
            <description>TODO : temp</description>
            <filter-class>tmp.pag.SysoutFilter</filter-class>
        </filter>

        <filter-mapping>
            <filter-name>SysoutFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/j_security_check</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/dwr/*</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>*.faces</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>*.jsf</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>securityFilter</filter-name>
            <url-pattern>/j_security_check</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>securityFilter</filter-name>
            <url-pattern>/dwr/*</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>securityFilter</filter-name>
            <url-pattern>*.faces</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>securityFilter</filter-name>
            <url-pattern>*.jsf</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>securityFilter</filter-name>
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>ajax4jsf</filter-name>
            <servlet-name>faces</servlet-name>
            <!--dispatcher>REQUEST</dispatcher>
            <dispatcher>FORWARD</dispatcher-->
        </filter-mapping>
        <!-- Commented out for 2 reasons: 1) it's a pain when developing JSPs, and
                                          2) it causes the Signup webtest to fail -->
        <!--filter-mapping>
            <filter-name>cacheFilter</filter-name>
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping-->
        <filter-mapping>
            <filter-name>hibernateFilter</filter-name>
            <url-pattern>*.faces</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>clickstreamFilter</filter-name>
            <url-pattern>*.faces</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>localeFilter</filter-name>
            <url-pattern>*.faces</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>localeFilter</filter-name>
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>exportFilter</filter-name>
            <url-pattern>*.faces</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>gzipFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>rewriteFilter</filter-name>
            <url-pattern>/*</url-pattern>
            <!--dispatcher>REQUEST</dispatcher>
            <dispatcher>FORWARD</dispatcher-->
        </filter-mapping>
        <filter-mapping>
            <filter-name>messageFilter</filter-name>
            <url-pattern>*.faces</url-pattern>
            <!--dispatcher>REQUEST</dispatcher>
            <dispatcher>FORWARD</dispatcher-->
        </filter-mapping>
        <filter-mapping>
            <filter-name>extensionsFilter</filter-name>
            <servlet-name>faces</servlet-name>
        </filter-mapping>
        <filter-mapping>
            <filter-name>extensionsFilter</filter-name>
            <url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
        </filter-mapping>

        <listener>
            <listener-class>tmp.pag.ListenerContext</listener-class>
        </listener>
        <listener>
            <listener-class>com.opensymphony.clickstream.ClickstreamListener</listener-class>
        </listener>
        <listener>
            <listener-class>net.sf.navigator.menu.MenuContextListener</listener-class>
        </listener>
        <listener>
            <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
        </listener>
        <listener>
            <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
        </listener>
        <listener>
            <listener-class>org.firsttest.webapp.listener.StartupListener</listener-class>
        </listener>
        <listener>
            <listener-class>org.firsttest.webapp.listener.UserCounterListener</listener-class>
        </listener>
        <listener>
            <listener-class>org.springframework.web.context.request.RequestContextListener2</listener-class>
        </listener>
        <listener>
            <!-- Ce listener doit etre place derriere le listener org.springframework.web.context.request.RequestContextListener -->
            <listener-class>de.mindmatters.faces.spring.context.ContextLoaderListener</listener-class>
        </listener>
        <listener>
            <listener-class>org.apache.tiles.listener.TilesListener</listener-class>
        </listener>

        <servlet>
            <servlet-name>faces</servlet-name>
            <!--servlet-class>javax.faces.webapp.FacesServlet</servlet-class-->
            <!--chgt2servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class-->
            <!-- TODO : ce changement permet d utiliser theme et gestion d erreur, mais plus
            fonctions myfaces i.e. compression, ... -->
            <servlet-class>de.mindmatters.faces.spring.context.servlet.FacesDispatcherServlet</servlet-class>
            <load-on-startup>2</load-on-startup>
        </servlet>

        <servlet>
            <!-- TODO : added temporary to load on startup faces servlet -->
            <servlet-name>myfaces</servlet-name>
            <servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class>
            <load-on-startup>3</load-on-startup>
        </servlet>

        <servlet>
            <servlet-name>dwr-invoker</servlet-name>
            <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
            <init-param>
                <param-name>debug</param-name>
                <param-value>true</param-value>
            </init-param>
        </servlet>

        <servlet-mapping>
            <servlet-name>faces</servlet-name>
            <url-pattern>*.faces</url-pattern>
        </servlet-mapping>

        <servlet-mapping>
            <servlet-name>faces</servlet-name>
            <url-pattern>*.jsf</url-pattern>
        </servlet-mapping>

        <servlet-mapping>
            <servlet-name>dwr-invoker</servlet-name>
            <url-pattern>/dwr/*</url-pattern>
        </servlet-mapping>

        <session-config>
            <session-timeout>10</session-timeout>
        </session-config>

        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>

        <error-page>
            <error-code>500</error-code>
            <location>/error.jsp</location>
        </error-page>
        <error-page>
            <error-code>400</error-code>
            <location>/index.jsp</location>
        </error-page>
        <error-page>
            <error-code>403</error-code>
            <location>/403.faces</location>
        </error-page>
        <error-page>
            <error-code>404</error-code>
            <location>/404.faces</location>
        </error-page>
    </web-app>

    faces-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

        <!-- 
            Ce controleur delegue le traitement de la requete a la page JSF.
            Exemple :
            requete browser = http://localhost:9082/firsttest/login.faces
            servlet faces mappee sur *.faces
            en utilisant un prefixe = / et suffixe = .jsp, ce controlleur
            delegue a la page jsp /login.jsp
         -->
        <bean name="/*"
            class="org.springframework.web.servlet.mvc.UrlFilenameViewController">
            <property name="prefix" value="/"/>
            <property name="suffix" value=".jsp"/>
        </bean>

    </beans>

     
    • Gonzalad

      Gonzalad - 2007-01-24

      If I correctly understand the implementation, FacesDispatcherServlet uses it's own lifecycle id : JSF_SPRING_DEFAULT, and not the default one (DEFAULT).

      If I use myfaces servlet to load jsf resources (such as phase-listener) no problem, I see that the listener list of the DEFAULT lifecycle is built (using all listeners in faces-config.xml files).

      If I use jsf-spring FacesDispatcher servlet to load jsf resources (such as phase-listener), I see that the phase listener list of the JSF_SPRING_DEFAULT lifecycle is NOT built from faces-config.xml.

      So I think it is really a bug in jsf spring.

       
      • Andreas Kuhrwahl

        No, it's not. See my posting a few minutes ago.

         
    • Andreas Kuhrwahl

      Hello,

      the integration of Spring MVC which is shipped with JSF-Spring creates *two* JSF-Lifecycles. All requests mapped against the 'de.mindmatters.faces.spring.context.servlet.FacesController' will use the default Lifecycle of the underlying JSF-Implementation (e.g. MyFaces). All other 'proprietary' Controllers are running in a JSF-Spring specific Lifecycle. Solution:
      Build a WEB-INF/faces-spring-context.xml configuration file as follows (will be read automatically by JSF-Spring):

      <?xml version="1.0" encoding="UTF-8"?>
      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:jsf="http://jsf-spring.sourceforge.net/schema/jsf"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                              http://jsf-spring.sourceforge.net/schema/jsf http://jsf-spring.sourceforge.net/schema/jsf/jsf-spring.xsd">
                             
          <jsf:phase-listener lifecycle-id="JSF_SPRING_DEFAULT" class="foo.BarPhaseListener"/> <!-- for JSF-SPring specific Lifecycle -->
         
          <jsf:phase-listener lifecycle-id="DEFAULT" class="foo.BarPhaseListener"/> <!-- for defaultLifecycle -->

      </beans>

      BTW
      If you use JSF-Spring, please remove the Spring DelegatingResolver; JSF-Spring automatically deploys its own.

       
    • Gonzalad

      Gonzalad - 2007-01-24

      Sorry, I couldn't read your previous email.

      I understand now (but it's a pity : I'm using quite a few external libraries bundling their faces-config.xml files -> I'll just have to copy their content in faces-spring-XXX.xml).

      Thank you very much for your help !

       
      • Andreas Kuhrwahl

        I understand your problem. I'm currently implementing version 4.1 with jsf 1.2 support. Maybe i get it configurable reading the 'default' phase-listeners for the JSF-Spring specific Lifecycle. But don't ask me when it's ready ;-)

         
    • Gonzalad

      Gonzalad - 2007-01-24

      Great !

      Note bene : will it work for JSF 1.1 components and external librairies ?

       
      • Andreas Kuhrwahl

        yes

         

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.