Migración a ICEfaces 2.0
Índice de contenidos.
1. Introducción
Aunque ya hace más de 1 año que tenemos la segunda versión de JSF, hace tan solo unos pocos meses que ICEFaces ha sacado una nueva versión de su librería compatible con JSF 2. Sobre la nueva versión de JSF podéis consultar este tutorial donde Alex nos explicaba sus novedades y un ejemplo de uso. En este tutorial vamos a ver los cambios a realizar en un proyecto donde ya tuviéramos montada una versión anterior de ICEfaces para migrarlo a la última versión y empezar a utilizar las nuevas mejoras que trae JSF 2.
2. Entorno
- MacBook Pro 15′ (2.4 GHz Intel Core i5, 4GB DDR3 SDRAM).
- Sistema Operativo: Mac OS X Snow Leopard 10.6.4
- JDK 1.6.0_20
- ICEfaces 2.0.2
3. Librerías
En el pom.xml tenemos que actualizar las librerías de ICEFaces de la 1.8.2 a la 2.0.0
1 2 3 4 5 6 7 8 9 10 11 |
<dependency> <groupid>org.icefaces</groupid> <artifactid>icefaces</artifactid> <version>2.0.2</version> </dependency> <dependency> <groupid>org.icefaces</groupid> <artifactid>icefaces-compat</artifactid> <version>2.0.2</version> </dependency> |
La primera de las 2 librerías es el core de ICEFaces. La segunda se encarga de la compatibilidad de los componentes con las versiones anteriores.
4. faces-config.xml
Lo siguiente será actualizar el fichero faces-config.xml, concretamente la definición del schema que apunta a la nueva de JSF 2.
Con ICEFaces 1.8.2
1 2 3 |
<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_1_2.xsd" version="1.2"> ... </faces-config> |
Con ICEFaces 2.0
1 2 3 |
<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> |
A partir de la versión 2 de JSF, Facelets ha quedado integrado como motor de plantillas estándar por lo que no es necesaria ninguna configuración adicional. Por ello eliminamos del faces-config.xml la siguiente línea:
En JSF 2 no es necesario añadir los managed beans al faces-config.xml, bastará con anotarlos con @ManagedBean, tampoco los converters ni validators.
1 |
<view-handler>com.icesoft.faces.facelets.D2DFaceletViewHandler</view-handler> |
5. web.xml
Los servlets Blocking Servlet y Persistent Faces Servlet que era obligatoria su definición han pasado a mejor vida por lo que hay que eliminarlos. Para ello editamos el fichero web.xml y borramos tanto la definición del servlet como el mapeo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<servlet> <servlet-name>Persistent Faces Servlet</servlet-name> <servlet-class>com.icesoft.faces.webapp.xmlhttp.PersistentFacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Persistent Faces Servlet</servlet-name> <url-pattern>*.iface</url-pattern> <url-pattern>*.jspx</url-pattern> <url-pattern>/xmlhttp/*</url-pattern> <url-pattern>*.faces</url-pattern> <url-pattern>*.jsf</url-pattern> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>Blocking Servlet</servlet-name> <servlet-class>com.icesoft.faces.webapp.xmlhttp.BlockingServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Blocking Servlet</servlet-name> <url-pattern>/block/*</url-pattern> </servlet-mapping> |
El Faces Servlet deberá recoger todas las peticiones JSF por lo que el mapeo debe quedar de la siguiente forma:
1 2 3 4 5 6 7 8 9 10 |
<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> |
Si en tu aplicación estás utilizando el ResourceServlet deberas usar el CompatResourceServlet ya que éste ha sido renombrado:
1 2 3 4 5 6 7 8 9 10 |
<servlet> <servlet-name>Resource Servlet</servlet-name> <servlet-class>com.icesoft.faces.webapp.CompatResourceServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Resource Servlet</servlet-name> <url-pattern>/xmlhttp/*</url-pattern> </servlet-mapping> |
Otro aspecto importante será modificar los parámetros del contexto que ayudarán a ICEFaces 2 en relación al escapado de los comentarios y la validación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<context-param> <description>Default Suffix.</description> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>xhtml</param-value> </context-param> <context-param> <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name> <param-value>false</param-value> </context-param> |
Hemos definido que las páginas que conforman la parte de presentación serán documentos xhtml por lo que habrá que cambiar las .jsp a .xhtml. También modificar las cabeceras de los documentos, para ello os recomiendo leer este tutorial de Jose sobre cómo modificar las JSPs en una migración al sistema de plantillas de Facelets.
1 2 3 4 |
<!-- Cabecera de JSP antigua--> <f:view xmlns:f="http://java.sun.com/jsf/core" xmlns:ice="http://www.icesoft.com/icefaces/component"> ... </f:view> |
1 2 3 4 5 |
<!-- Cabecera de XHTML nueva --> <?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:ice="http://www.icesoft.com/icefaces/component"> |
También será necesario eliminar el ContextEventRepeater
1 2 3 |
<listener> <listener-class>com.icesoft.faces.util.event.servlet.ContextEventRepeater</listener-class> </listener> |
6.Conclusiones
Si utilizas ICEFaces en versiones anteriores a la 2.0.x es muy recomendable que actualices a las 2 ya que podrás utilizar todas las nuevas características que incluye el estándar JSF 2 que hacen el desarrollo mucho más sencillo y rápido.
Espero que te haya servido de ayuda.
Un saludo. Juan.
Es interesante ver el juego que ha dado y sigue dando la definición de la JSR relativa a Servlets. A mi me gusta también el hecho de la importancia que Ajax y las anotaciones estan tomando en estas nuevas evoluciones. De JSF me gusta la interactividad que ofrece entre la capa de la vista (las propias JSFs) y los Managed Bean. Esta estructura me parece una visión organizada alternativa de una aplicación web.