JBoss.orgCommunity Documentation
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.
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.
|
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 |
forcenotrf | 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 |
RichFaces works with implementation of JSF (JSF 1.2_12) and with most JSF component libraries without any additional settings. For more information look at:
java.sun.com |
Additional information how to get ViewExpiredExceptions
when using RichFaces with JSF
1.2_12 you can find in RichFaces Cookbook article.
RichFaces works with Apache MyFaces 1.2.5 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.
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.
In this case you don't have to define
FaceletViewHandler
in the
WEB-INF/faces-config.xml.
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>
<!-- 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 in the RichFaces Cookbook article
JBoss Portlets have support since version Ajax4jsf 1.1.1. This support is improved from RichFaces 3.2.1. Provide your feedback on compatible with RichFaces if you face some problems.
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.
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>
...