Adicionando Rich Faces 3.3.3 no JSF 2.0

A biblioteca de componentes RichFaces para JSF é a mais utilizada atualmente, entretanto sua versão estável mais recente, a 3.3.3,  não possui compatibilidade total com a nova versão do JSF. Apesar disso, é possível utilizar os dois juntos realizando algumas modificações e adicionando algumas bibliotecas a mais. Não sei até que ponto a utilização do RichFaces com JSF 2.0 vale a pena devido a não ter 100% de compatibilidade… mas para realização de testes e experimentos com certeza vale!

Então vamos lá!

As bibliotecas necessárias, além das bibliotecas do JSF 2.0, para utilizar o RichFaces 3.3.3 são:

– Biblioteca RichFaces 3.3.3 (download)

– Os 4 commons a seguir (download):

-commons-beanutils.jar

-commons-collections.jar

-commons-digester.jar

-commons-logging.jar

Um detalhe importante é que os facelets também não possuem total compatibilidade com o RichFaces 3.3.3, então é indicado a utilização de páginas jsp na camada de visão para que a adição do RichFaces 3.3.3 no JSF 2 funcione.

O arquivo web.xml deve ficar configurado de acordo com exemplo abaixo:



<?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>javax.faces.PROJECT_STAGE</param-name>

<param-value>Development</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>/faces/*</url-pattern>

</servlet-mapping>

<session-config>

<session-timeout>            30        </session-timeout>

</session-config>

<welcome-file-list>

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

</welcome-file-list>

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

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

<listener>

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

</listener>

</web-app>


As configurações para que o richfaces funcione são estas. Para testa-las vamos criar um exemplo simples onde será necessário a criação de uma página jsp e de um bean simples.

O bean será chamado User e  ira conter apenas um atributo name. No final sua classe deve ficar desta maneira:

User.java


import javax.faces.bean.ManagedBean;

@ManagedBean
public class User {

String name;

public User() {
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

A página jsp deve incluir as bibliotecas do richfaces e devem conter a execução de um exemplo. No final a página ficará assim:

index.jsp


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!-- Declaração das Tags da biblioteca RichFaces -->
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Exemplo JSF 2.0 + RichFaces 3.3.3</title>
</head>
<body>
<f:view>
<h1><h:outputText value="Java Server Faces 2.0 + RichFaces 3.3.3"/></h1>

<a4j:form>
<rich:panel header="RichFaces 3.3.3 Exemplo" style="width: 315px">
<h:outputText value="Seu nome: " />
<h:inputText value="#{user.name}" >
<f:validateLength minimum="1" maximum="30" />
</h:inputText>
<a4j:commandButton value="Enviar" reRender="painelResposta" />
<br/>
<h:panelGroup id="painelResposta" >
<h:outputText value="Olá, " rendered="#{not empty user.name}" />
<h:outputText value="#{user.name}" />
<h:outputText value="!" rendered="#{not empty user.name}" />
</h:panelGroup>
</rich:panel>
</a4j:form>
</f:view>
</body>
</html>

Após a criação da classe e da página o projeto pode ser executado e deve mostrar no browser o seguinte:

jsf2richfaces3.3.3

Por hoje é só pessoal!

Enquanto não sai a versão 4.0 do richfaces surge a necessidade para quem deseja utilizar JSF 2 com RichFaces de adaptar a essas condições!

Abraços e qualquer coisa estamos ai!

7 comments for “Adicionando Rich Faces 3.3.3 no JSF 2.0

  1. Moacir
    3 de Agosto de 2010 at 8:20

    E o faces-config.xml?

    • José Alexandre Macedo
      3 de Agosto de 2010 at 11:18

      Olá Moacir!
      O faces-config não precisará de nenhuma configuração específica por isso não foi apresentado!
      Caso sinta a necessidade me fale que te passo!
      Abraços!

  2. Paulo
    12 de Novembro de 2010 at 8:50

    Olá,

    se puder me ajudar eu agradeço fiz o que você passou acima mais quando fui executar o projeto me apresentou esse erro abaixo.
    Estou usando eclipse 3.6 , java 6, tomcat 7 , jsf 2.0 , richfaces 3.3 .
    E coloquei todos os jar no lib do projeto e fui em Properties do Projeto em Java Build Path e ADD External Jar e coloquei todas os jar do diretorio lib do projeto.
    Se puder me ajudar eu agradeço

    SEVERE: Error configuring application listener of class com.sun.faces.config.ConfigureListener
    java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1672)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1517)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4287)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4816)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1028)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:773)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1028)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:278)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:429)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:662)

  3. 3 de Janeiro de 2011 at 5:30

    I’ve recently started a blog, the information you provide on this site has helped me tremendously. Thank you for all of your time & work.

  4. Oliver
    13 de Abril de 2011 at 22:36

    ja conseguiu integrar richfaces4 + primefaces2.1?
    Se sim, como?

    • 14 de Abril de 2011 at 12:28

      Olá Oliver,

      Ainda não cheguei a integrar os dois mais é uma boa ideia :)!
      Vou ver se implemento pra postar no blog!

      Obrigado pela sugestão!

      Abraços,
      José Alexandre

Deixar uma resposta