¿Te gustaría aprender Frameworks Java Empresariales?
Tenemos los cursos que necesitas.¡Haz clic aquí!
PrimeFaces es una librería de componentes visuales open source desarrollada y mantenida por Prime Technology, una compañía Turca de IT especializada en consultoría ágil, JSF, Java EE y Outsourcing. El proyecto es liderado por Çağatay Çivici, un miembro del «JSF Expert Group» (y forofo del Barça).
Las principales características de Primefaces son:
- Soporte nativo de Ajax, incluyendo Push/Comet.
- Kit para crear aplicaciones web para móviles.
- Es compatible con otras librerías de componentes, como JBoss
RichFaces. - Uso de javascript no intrusivo (no aparece en línea dentro de
los elementos, sino dentro de un bloque <script>). - Es un proyecto open source, activo y bastante estable entre
versiones.
Algunos inconvenientes podrían ser:
- Para utilizar el soporte de Ajax tenemos que indicarlo explícitamente, por medio de atributos específicos de cada componente.
- No podemos utilizar el soporte de Ajax de JSF 2 ( con los componentes de Primefaces.
Añadiendo el soporte para Primefaces
Configuración del pom.xml:
<build>
<finalName>primefacesAppDemo</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<!-- Repositorio de Maven de JBoss -->
<repository>
<id>maven2-repository.jboss.com</id>
<name>Jboss Repository for Maven</name>
<url>http://repository.jboss.com/maven2</url>
</repository>
<!-- Repositorio con el API y la implementación de JSF 2 -->
<repository>
<id>maven2-repository.dev.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2</url>
</repository>
<!-- Repositorio de Primefaces -->
<repository>
<id>prime-repo</id>
<name>Prime Technology Maven Repository</name>
<url>http://repository.prime.com.tr/</url>
<layout>default</layout>
</repository>
</repositories>
<dependencies>
<!-- API e implementación de JSF 2. Del repo dev.java.net -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.2-b10</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.2-b10</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Librerías de Primefaces -->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>2.0.2</version>
</dependency>
</dependencies>
Descriptor de despliegue de la aplicación web:
<display-name>Introducción a Primefaces</display-name>
<!-- Configuración de JSF -->
<context-param>
<description>
Define the value returned by Application.getProjectStage(). Allowed values: Production, Development,
UnitTest, SystemTest, Extension. Default value is Production.
</description>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<description>Do not render comments in facelets (xhtml) pages. Default is false.</description>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</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>*.xhtml</url-pattern>
</servlet-mapping>
<!-- Servlet de recursos de Primefaces -->
<servlet>
<servlet-name>Resource Servlet</servlet-name>
<servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/primefaces_resource/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
Por último, y lo mejor, el fichero de configuración de JSF. Con el
uso de anotaciones en nuestros bean manejados y el soporte nativo de
Facelets, este fichero puede ser tan simple como esto:
<?xml version='1.0' encoding='UTF-8'?>
<faces-config 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-facesconfig_2_0.xsd" version="2.0">
</faces-config>
Creando una página de prueba
Para probar si funciona nuestra configuración, vamos a crear la
página index.xhtml, con el siguiente contenido:
Prueba con Primefaces
<h:body>
<h:form>
<p:panel header="Prueba con Primefaces">
<h:panelGrid columns="2">
<h:outputLabel value="Fecha" />
<p:calendar pattern="dd/MM/yyyy" />
</h:panelGrid>
</p:panel>
</h:form>
</h:body>
Hemos especificado el espacio de nombres «xmlns:p» para poder
utilizar la librería de componentes de Primefaces y, como no, hemos
añadido un componente calendario dentro de un panel, aunque podríamos
haber elegido cualquiera de los que hay en la librería
de componentes de Primefaces.
Si abrimos la página con un navegador, veremos el resultado:
Añadir el soporte de un ManagedBean
Vamos a añadir un controlador para nuestra vista que guarde en una
variable la fecha seleccionada en el calendario. Además, cuando se
seleccione la fecha, se realizará una llamada por Ajax al método «cambioFecha» del controlador, que añadirá un mensaje de Faces que se mostrará en la página.
El fichero PruebaView.java es el siguiente:
package com.autentia.tutorial.view;
import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.DateSelectEvent;
@ManagedBean
@ViewScoped
public class PruebaView implements Serializable {
private static final long serialVersionUID = 8995118759276351827L;
private Date date;
public void cambioFecha(DateSelectEvent event) {
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Fecha seleccionada: " + formatter.format(event.getDate())));
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
Debemos modificar el código de nuestra vista para enlazar el valor de la fecha del calendario con la variable «date» del controlador.Además habrá que llamar al método «cambioFecha» cuando cambie la selección y añadir el componente que mostrará los mensajes. Se ha utilizado el componente «growl» de Primefaces, que mostrará los mensajes dentro de unos «pop-ups» que desaparecerán transcurridos unos segundos.
Shell
<h:form> <p:growl id="growl" /> <p:panel header="Prueba con Primefaces"> <h:panelGrid columns="2"> <h:outputLabel value="#{pruebaView.date}" /> <p:calendar pattern="dd/MM/yyyy" selectListener="#{pruebaView.cambioFecha}" onSelectUpdate="growl" /> </h:panelGrid> </p:panel> </h:form> |
Ahora, cuando cambiemos la fecha del calendario, veremos que aparece
el siguiente mensaje:
Comparativa con otras librerías
Para terminar, vamos a ver un resumen de las características de
Primefaces comparándolo con otras dos librerías: ICEfaces y RichFaces.
Característica | ICEfaces | RichFaces | Primefaces |
---|---|---|---|
Soporte de Ajax | Es transparente para el desarrollador, lo implementa de forma nativa en todos los componentes mediante la propiedad partialSubmit | Tenemos que hacer uso de Ajax4JSF, que no es tan transparente para el desarrollador, puesto que, además de introducir los componentes de RichFaces, tenemos que añadir componentes no visuales de la librería Ajax4JSF. | Es transparente para el desarrollador, aunque para activarlo deben utilizarse atributos específicos para lanzar un método del servidor y para indicar los componentes a actualizar. |
Librerías en las que se basan | Usa el soporte de prototypejs, aunque la parte de Ajax la han rescrito y para los efectos visuales utilizan script.aculo.us. | Usa el soporte de prototypejs y script.aculo.us, aunque soporta también jquery. | Utiliza el soporte de jQuery y jQuery UI para los efectos visuales. |
Personalización de la interfaz de usuario | Incorpora el concepto de skins y distribuye 3 temas. | Incorpora el concepto de skins y distribuye 12 temas, aunque se pueden encontrar más en el repositorio de SNAPSHOTS. | Incorpora el concepto de skins, utilizando ThemeRoller, y dispone de 26 temas prediseñados. |
Número de componentes | Tiene 79 componentes en la versión básica, a los que hay que sumar 32 de la versión empresarial, esta última es de pago. La percepción es que estan inviertiendo esfuerzos en mejorar la versión empresarial y, como es lógico, esperan obtener beneficio económico por ello. | Tiene 212 componentes entre los propios de RichFaces y los de Ajax4JSF. Con RichFaces todos los componentes son OpenSource y podemos usar un Pick List sin contratar nada, sin embargo, con ICEfaces sin queremos un Dual List o pagamos o lo implementamos nosotros. | Tiene más de 90 componentes OpenSource, algunos muy avanzados como el HTMLEditor. Además dispone de un kit para crear interfaces web para teléfonos móviles. |
Licencia | MPL 1.1, que cubre la LGPL V 2.1. Si bien disponen de una versión empresarial con licencia comercial. | LGPL V 2.1. en su totalidad. | Apache License V2 |
Relevancia | Ha sustituido a Woodstock como librería de componentes de referencia de Sun para el desarrollo de aplicaciones RIA. Se distribuye, por defecto, con NetBeans. | Es la librería de componentes visuales de Jboss, se integra, por defecto con Jboss Seam, aunque éste también soporta ICEfaces. | Ha sido una de las primeras librerías capaces de integrarse con JSF 2 y viene pisando fuerte debido a la diversidad y calidad de sus componentes. Puede utilizarse junto a Richfaces, pero no es compatible con ICEfaces. |
Para concluir
Existen actualmente bastantes librerías de componentes para JSF. El elegir utilizar una u otra dependerá en gran medida del número y la calidad de componentes que nos ofrezca, la estabilidad en los cambios de versión, el disponer de una buena documentación y la utilización e integración con otros estándares.
Se puede decir que Primefaces cumple sobradamente con todas esas características, por lo que puede ser una buena elección. Además hay que tener en cuenta que no estamos limitados a utilizar una única librería, aunque en ese caso habría investigar un poco más para estar seguros de que no se produzcan incompatibilidades entre ellas, que podrían darnos mucha dificultad.
Te esperamos en los siguientes artículos en donde hablaremos más acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.
¿Te gustaría aprender Frameworks Java Empresariales?
Tenemos los cursos que necesitas.¡Haz clic aquí!