JBoss.org Community Documentation

- Prev
- Next

## Chapter 4. Settings for different environments

RichFaces comes with support for all tags (components) included in the JavaServer Faces specification. To add RichFaces capabilities to the existing JSF project you should just put the RichFaces libraries into the lib folder of the project and add filter mapping. The behavior of the existing project doesn't change just because of RichFaces.

## 4.1. Web Application Descriptor Parameters

RichFaces doesn't require any parameters to be defined in your web.xml. But the RichFaces parameters listed below may help with development and may increase the flexibility of RichFaces usage.

Table 4.1. Initialization Parameters

Name | Default | Description
--- | --- | ---
org.richfaces.SKIN | DEFAULT | Is a name of a skin used in an application. It can be a literal string with a skin name, or the EL expression (`#{...}`) pointed to a String property (skin name) or a property of a org.richfaces.framework.skin type. Skin in last case, this instance is used as a current skin
org.richfaces.LoadScriptStrategy | DEFAULT | Defines how the RichFaces script files are loaded to application. Possible values are: ALL, DEFAULT, NONE. For more information see "Scripts and Styles Load Strategy".
org.richfaces.LoadStyleStrategy | DEFAULT | Defines how the RichFaces style files are loaded to application. Possible values are: ALL, DEFAULT, NONE. For more information see "Scripts and Styles Load Strategy".
org.ajax4jsf.LOGFILE | none | Is an URL to an application or a container log file (if possible). If this parameter is set, content from the given URL is shown on a Debug error page in the iframe window
org.ajax4jsf.VIEW_HANDLERS | none | Is a comma-separated list of custom ViewHandler instances for inserting in chain. Handlers are inserted BEFORE RichFaces viewhandlers in the given order. For example, in facelets application this parameter must contain com.sun.facelets.FaceletViewHandler, instead of declaration in faces-config.xml
org.ajax4jsf.CONTROL_COMPONENTS | none | Is a comma-separated list of names for a component as a special control case, such as messages bundle loader, alias bean components, etc. Is a type of component got by a reflection from the static field COMPONENT_TYPE . For components with such types encode methods always are called in rendering Ajax responses, even if a component isn't in an updated part
org.ajax4jsf.ENCRYPT_RESOURCE_DATA | false | For generated resources, such as encrypt generation data, it's encoded in the resource URL. For example, URL for an image generated from the mediaOutput component contains a name of a generation method, since for a hacker attack, it is possible to create a request for any JSF baked beans or other attributes. To prevent such attacks, set this parameter to "true" in critical applications (works with JRE > 1.4 )
org.ajax4jsf.ENCRYPT_PASSWORD | random | Is a password for encryption of resources data. If isn't set, a random password is used
org.ajax4jsf.COMPRESS_SCRIPT | true | It doesn't allow framework to reformat JavaScript files (makes it impossible to debug)
org.ajax4jsf.RESOURCE_URI_PREFIX | a4j | Defines prefix which is added to all URIs of generated resources. This prefix designed to handle RichFaces generated resources requests
org.ajax4jsf.GLOBAL_RESOURCE_URI_PREFIX | a4j/g | Defines prefix which is added to URIs of global resources. This prefix designed to handle RichFaces generated resources requests
org.ajax4jsf.SESSION_RESOURCE_URI_PREFIX | a4j/s | Defines prefix which is used for session tracking for generated resources. This prefix designed to handle RichFaces generated resources requests
org.ajax4jsf.DEFAULT_EXPIRE | 86400 | Defines in seconds how long streamed back to browser resources can be cached
org.ajax4jsf.SERIALIZE_SERVER_STATE | false | If enabled the component state (not the tree) will be serialized before being stored in the session. This may be desirable for applications that may have issues with view state being sensitive to model changes. Instead of this parameter can use `com.sun.faces.serializeServerState` and `org.apache.myfaces.SERIALIZE_STATE_IN_SESSION` parameters for corresponding environments.

## Note:

`org.richfaces.SKIN` is used in the same way as `org.ajax4jsf.SKIN`

Table 4.2. org.ajax4jsf.Filter Initialization Parameters

Name | Default | Description
--- | --- | ---
log4j-init-file | - | Is a path (relative to web application context) to the log4j.xml configuration file, it can be used to setup per-application custom logging
enable-cache | true | Enable caching of framework-generated resources (JavaScript, CSS, images, etc.). For debug purposes development custom JavaScript or Style prevents to use old cached data in a browser
forceparser | true | Force parsing by a filter HTML syntax checker on any JSF page. If "false", only Ajax responses are parsed to syntax check and conversion to well-formed XML. Setting to "false" improves performance, but can provide visual effects on Ajax updates

## 4.2. Sun JSF RI

RichFaces works with implementation of JSF (JSF 1.2) and with most JSF component libraries without any additional settings. For more information look at:

java.sun.com

## 4.3. Apache MyFaces

RichFaces works with Apache MyFaces 1.2 version including specific libraries like TOMAHAWK Sandbox and Trinidad (the previous ADF Faces). However, there are some considerations to take into account for configuring applications to work with MyFaces and RichFaces.

There are some problems with different filters defined in the web.xml file clashing. To avoid these problems, the RichFaces filter must be the first one among other filters in the web.xml configuration file.

For more information look at: http://myfaces.apache.org

There's one more problem while using MyFaces + Seam . If you use this combination you should use <a4j:page> inside <f:view> (right after it in your code) wrapping another content inside your pages because of some problems in realization of <f:view> in myFaces.

The problem is to be overcome in the nearest future.

## 4.4. Facelets Support

A high-level support for Facelets is one of our main support features. When working with RichFaces, there is no difference what release of Facelets is used.

You should also take into account that some JSF frameworks such as Facelets use their own `ViewHandler` and need to have it first in the chain of ViewHandlers and the RichFaces AjaxViewHandler is not an exception. At first RichFaces installs its ViewHandler in any case, so in case of two frameworks, for example RichFaces + Facelets, no changes in settings are required. Although, when more then one framework (except RichFaces) is used, it's possible to use the `VIEW_HANDLERS` parameter defining these frameworks view handlers according to its usage order in it. For example, the declaration:

Example:

                <context-param>

                <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>

                <param-value>com.sun.facelets.FaceletViewHandler</param-value>

                </context-param>

says that Facelets will officially be the first, however `AjaxViewHandler` will be a little ahead temporarily to do some small, but very important job.

## Note:

In this case you don't have to define `FaceletViewHandler` in the WEB-INF/faces-config.xml.

## 4.5. JBoss Seam Support

RichFaces now works out-of-the-box with JBoss Seam and Facelets running inside JBoss AS 4.0.4 and higher. There is no more shared JAR files needed. You just have to package the RichFaces library with your application.

Your web.xml for Seam 1.2 must be like this:

    <?xml version="1.0" ?>

    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"

            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

            version="2.4">

        <!-- richfaces -->

        <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>

            <url-pattern>*.seam</url-pattern>

        </filter-mapping>

        <context-param>

            <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>

            <param-value>org.jboss.seam.ui.facelet.SeamFaceletViewHandler</param-value>

        </context-param>

        <!-- Seam -->

        <listener>

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

        </listener>

        <servlet>

            <servlet-name>Seam Resource Servlet</servlet-name>

            <servlet-class>org.jboss.seam.servlet.ResourceServlet</servlet-class>

        </servlet>

        <servlet-mapping>

            <servlet-name>Seam Resource Servlet</servlet-name>

            <url-pattern>/seam/resource/*</url-pattern>

        </servlet-mapping>

        <filter>

            <filter-name>Seam Filter</filter-name>

            <filter-class>org.jboss.seam.web.SeamFilter</filter-class>

        </filter>

        <filter-mapping>

            <filter-name>Seam Filter</filter-name>

            <url-pattern>/*</url-pattern>

        </filter-mapping>

       <!-- MyFaces -->

        <listener>

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

        </listener>

        <!-- JSF -->

        <context-param>

            <param-name>javax.faces.STATE_SAVING_METHOD</param-name>

            <param-value>client</param-value>

        </context-param>

        <context-param>

            <param-name>javax.faces.DEFAULT_SUFFIX</param-name>

            <param-value>.xhtml</param-value>

        </context-param>

        <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>*.seam</url-pattern>

        </servlet-mapping>

    </web-app>

Seam 2 supports RichFaces Filter. Thus your web.xml for Seam 2 must be like this:

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.5"

        xmlns="http://java.sun.com/xml/ns/javaee"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

        <context-param>

            <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>

            <param-value>com.sun.facelets.FaceletViewHandler</param-value>

        </context-param>

        <!-- Seam -->

        <listener>

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

        </listener>

        <servlet>

            <servlet-name>Seam Resource Servlet</servlet-name>

            <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>

        </servlet>

        <servlet-mapping>

            <servlet-name>Seam Resource Servlet</servlet-name>

            <url-pattern>/seam/resource/*</url-pattern>

        </servlet-mapping>

        <filter>

            <filter-name>Seam Filter</filter-name>

            <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>

        </filter>

        <filter-mapping>

            <filter-name>Seam Filter</filter-name>

            <url-pattern>/*</url-pattern>

        </filter-mapping>

        <!-- JSF -->

        <context-param>

            <param-name>javax.faces.DEFAULT_SUFFIX</param-name>

            <param-value>.xhtml</param-value>

        </context-param>

        <context-param>

            <param-name>facelets.DEVELOPMENT</param-name>

            <param-value>true</param-value>

        </context-param>

        <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>*.seam</url-pattern>

        </servlet-mapping>

    </web-app>

Only one issue still persists while using Seam with MyFaces. Look at myFaces part of this section.

Detailed information on how to integrate Richfaces and Trinidad and how to hide ".seam" postfix in the URL you can find here

## 4.6. Portlet Support

JBoss Portlets have support since version Ajax4jsf 1.1.1. This support is improved in RichFaces 3.2.1. Provide your feedback on compatible with RichFaces if you face some problems.

## 4.7. Sybase EAServer

The load-on-startup for the Faces Servlet had to be set to 0 in web.xml.

Example:

    ...

          <servlet>

              <servlet-name>Faces Servlet</servlet-name>

              <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

              <load-on-startup>0</load-on-startup>

        </servlet>

    ...

This is because, EAServer calls servlet `init()` before the `ServletContextInitializer`. Not an EAServer bug, this is in Servlet 2.3 spec.

## 4.8. Oracle AS/OC4J

In order to deploy your project with RichFaces components to an Oracle AS you just have to prevent the application's class loader from importing the Oracle XML parser. Use the following notation in orion-application.xml :

    ...

    <imported-shared-libraries>

            <remove-inherited name="oracle.xml"/>

            <remove-inherited name="oracle.xml.security"/>

    </imported-shared-libraries>

    ...

- PrevChapter 3. Getting Started with RichFaces
- Top of page
- Front page
- NextChapter 5. Basic concepts of the RichFaces Framew...