You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by Apache Wiki <wi...@apache.org> on 2007/02/28 14:38:48 UTC

[Myfaces Wiki] Update of "TrinidadSeamAjax4JsfFaceletDetail" by ThomasHamacher

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Myfaces Wiki" for change notification.

The following page has been changed by ThomasHamacher:
http://wiki.apache.org/myfaces/TrinidadSeamAjax4JsfFaceletDetail

New page:
     
 
== Configure Trinidad for use with Seam, ajax4jsf  and Facelets ==

In a complex environment with a lot of different libraries to play together and therefor use the best of all to fullfil your requirements, there are some things to keep in mind. This is a short description on how I configured my application to make these components run together.

I´m referencing to the following environment:

    * Trinidad Nightly Build from Apache Incubator [http://people.apache.org/repo/m2-snapshot-repository/org/apache/myfaces/trinidad/]
    * JBoss Seam 1.1.6 [http://www.jboss.com/products/seam]
    * Ajax4jsf 1.0.6 [https://ajax4jsf.dev.java.net/]
    * Facelets 1.1.12 [https://facelets.dev.java.net/]
    * MyFaces 1.1.5 [http://myfaces.apache.org/]
    * JBoss Application Server 4.0.5 [http://labs.jboss.com/]

To make Trinidad play together with Ajax4jsf you also have to include the `a4j-trinidad.jar`. The a4j-trinidad contains an alternative AjaxContext called TrinidadAjaxContext which is not present in the main distribution, so you will need the extra library additional to the ajax4jsf-library. You will find this at the ajax4jsf-website as well.


=== faces-config.xml ===
Let´s start with the `faces-config.xml`. It is very neccessary to remove all `view-handler`s and instead set the `default-render-kit` to Trinidad. Then the faces-config.xml should look something like this:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<faces-config>
    
    <!-- Phase listener needed for all Seam applications -->

    <lifecycle>
        <phase-listener>org.jboss.seam.jsf.SeamPhaseListener</phase-listener>
    </lifecycle>
    
    <application>
        <default-render-kit-id>org.apache.myfaces.trinidad.core</default-render-kit-id>
    </application>

</faces-config>

=== web.xml ===
Let´s go over to the `web.xml`. First we have to define a special set of `listeners`. I don´t think the order is that important in this case, but I started with the
SeamListener, which is declared as follows:

    <listener>
        <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
    </listener>
    

Afterward you have to define the listener for your JSF-Implementation. I used MyFaces and therefor used this declaration:

    <listener>
        <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
    </listener>
    

But if you´re playing with SUN RI, declare it this way:

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

For the most of the libraries you don´t have to set any special context-parameters, but when it comes to the Trinidad `context-param`s the following declaration is 
necessary:

    <context-param>
        <param-name>org.apache.myfaces.trinidad.ALTERNATE_VIEW_HANDLER</param-name>
        
        <param-value>com.sun.facelets.FaceletViewHandler</param-value>
    </context-param>  
    

When it comes to the `filter-mapping` the order is very important. You have to define the ajax4jsf-filter-mapping as the very first one, followed by the others.
This is the sequence I used in my web.xml:

    <!-- ************************ AJAX4JSF Filter **************************** -->
    
    <!-- If you have other filters declared in the web.xml, be sure that Ajax4jsf Filter is declared before the others. -->
    
    <filter>
        <display-name>Ajax4jsf Filter</display-name>
        
        <filter-name>ajax4jsf</filter-name>
        
        <filter-class>org.ajax4jsf.Filter</filter-class>
        
        <init-param>
        
            <param-name>forceparser</param-name>
        
            <param-value>false</param-value>
        
        </init-param>
    
    </filter>
    
    <filter-mapping>
    
        <filter-name>ajax4jsf</filter-name>
    
        <servlet-name>Faces Servlet</servlet-name>        
    
        <dispatcher>REQUEST</dispatcher>
    
        <dispatcher>FORWARD</dispatcher>
    
        <dispatcher>INCLUDE</dispatcher>
    
    </filter-mapping>
    
    
    
    <!-- ************************ Trinidad Filter **************************** -->
    
    <filter>
        <filter-name>Trinidad</filter-name>
        
        <filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>Trinidad</filter-name>
        
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
    
    
    
    <!-- ************************ Seam Filter **************************** -->
    
    <filter>
        <filter-name>Seam Exception Filter</filter-name>
      
        <filter-class>org.jboss.seam.servlet.SeamExceptionFilter</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>Seam Exception Filter</filter-name>
       
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <filter>
        <filter-name>Seam Redirect Filter</filter-name>
        
        <filter-class>org.jboss.seam.servlet.SeamRedirectFilter</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>Seam Redirect Filter</filter-name>
       
        <url-pattern>*.seam</url-pattern>
    </filter-mapping>
    


This is all I did and it works quite nice and smoothly.  

Hope it helps someone to run these great libraries together, which makes development really smooth and easy.

Have fun!

''Thomas Hamacher''