Facelets
comenzando con una pequeñaintroducción y
luego una descripción básica del uso de templating en una aplicación
JSF(JavaServer Faces).
Introducción
es un framework para plantillas (templates)
centrado en la tecnología JSF(JavaServer Faces), por lo cual se integran de
manera muy fácil. Este framework incluyemuchas características siendo las más
importantes:
•Tiempo de desarrollo cero de los
tags para UIComponents.
•Facilidad en la creación del
templating para los componentes y páginas.
•Habilidad de separar los UIComponents en diferentes archivos.
•Un buen sistema de reporte de errores.
•Soporte completo a EL (Expression
Language).
•Validación de EL en tiempo de
construcción.
•No es necesaria configuración XML.
Trabaja con cualquier RenderKit.Desafortunadamente
JSP (JavaServer Pages) y JSF no se complementan naturalmente,cuando se usan juntos
ambos escriben output al response, pero lo hacen de una maneradiferente: JSP crea
output ni bien encuentra código JSP (es decir procesa los elementos de lapágina de arriba a abajo), mientras que JSF dicta
su propio re-rendering (ya que su ciclo devida está dividido en fases
marcadas). Facelets llena este vacío entre JSP y JSF, siendo unatecnología centrada en crear árboles de
componentes y estar relacionado con el complejo ciclode vida JSF.
¿Por qué Facelets?
•No depende de un contenedor Web.
•Integrar JSP con JSF trae problemas, además, no se puede usar JSTL
(JavaServer Pages Standard Tag Library) con JSF, cosa que Facelets sí
provee.
•Facelets provee un proceso de
compilación más rápido que JSP.
•Provee templating, lo cual implica reutilización de código,
simplificación de desarrollo yfacilidad en
el mantenimiento de grandes aplicaciones.
•Permite crear componentes ligeros sin necesidad de crear los tags de
losUIComponents (es más fácil comparado a crear un componente JSF puro).
•Soporta Unified Expression
Language, incluyendo soporte para funciones EL yvalidación de EL en tiempo de
compilación.
Templating
Existen tres maneras de modularizar las páginas y
componentes:
includes, archivos tag y decorators. Pero primero algo básico de templating:
La página que contendrá al template:
<html
xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jstl/core">
<head>
<ui:insert name="head" />
</head>
<body>
<div class="body" >
<ui:insert name="body"
>
Contenido por defecto
</ui:insert>
</div>
</body>
</html>
El template en sí:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jstl/core"
template="/template.xhtml"
>
<!-- nótese el uso
del atributo 'template' -->
<ui:define name="head" >
<!-- contenido
de la cabecera -->
</ui:define>
<ui:define name="body" >
<!-- contenido del cuerpo
-->
</ui:define>
</ui:composition>
Como puede verse donde uno quiere que se inserte
código se usa el tag <ui:insertname=”nombre”/> donde nombre corresponde al
identificador de la sección.
Tres maneras de modularizar con
Facelets
Esta es la porción de código que se abstraerá para
los ejemplos siguientes:
<ui:composition>
Bienvenido, #{usuario.nombre}
</ui:composition>
•Templating mediante ‘includes’
Este es el método más familiar para modularizar
componentes (se le pueden pasar parámetrosal ‘ui:include’).
<span
id="loginDisplay"
>
<ui:include src="/contenido/bienvenido.xhtml" >
<ui:param name="usuario" value="#{usuarioActual}"
/>
</ui:include>
</span>
•Templating mediante un ‘tag file’
Para esta manera de templating, al tag se le da un
namespace, por ejemplo:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:my="http://www.mycompany.com/jsf"
>
...
<!-- uso del tag -->
<my:bienvenido usuario="#{usuarioActual}" />
...
</ui:composition>
¿Cómo especificamos el tag?: en un archivo xml, que es una libreria de
tags facelets. Estearchivo es cargado
automáticamente por Facelets, para ello debe tener la extensión *.taglib.xml y estar ubicado en
el directorio especial META-INF.
<facelet-taglib>
<namespace> http://www.mycompany.com/jsf </namespace>
<tag>
<tag-name> bienvenido </tag-name>
<source> contenido/bienvenido.xhtml </source>
</tag>
...
<!-- otros tags -->
</facelet-taglib>
•Templating mediante ‘decorators’
Los decorators se pueden usar de la misma manera
que los compositions, pero éstos puedenser insertados en la página (inline).
El texto anterior se mostrará.
<ui:decórate
template="/contenido/bienvenido.xhtml"
>
<ui:param name="usuario" value="#{usuarioActual}" />
</ui:decorate>
El texto
posterior se mostrará.
Un uso práctico del decorator es cuando no tiene
mucho sentido abstraer el componente en unarchivo aparte, pero sí usar las
ventajas del templating.
A manera de conclusión
El uso de templating trae consigo las ventajas de tener un código
ordenado (sobre todo enaplicaciones grandes), fácil de desarrollar y reusar.
Uno puede crear componentes o templatesque
abarcan desde simplemente mostrar texto hasta crear componentes que muestren
uncheckbox, un input o un dropdown dependiendo de la data del backing bean.
Comentarios
Publicar un comentario