JavaServer Facelets

JavaServer Facelets es un framework para plantillas (templates) centrado en la tecnología JSF (JavaServer Faces), por lo

Views 467 Downloads 3 File size 265KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

JavaServer Facelets es un framework para plantillas (templates) centrado en la tecnología JSF (JavaServer Faces), por lo cual se integran de manera muy fácil. Facelets es un framework de templating que nos facilita la gestión de la estructura y el estilo de las jsp, lo cual tiene beneficios en cuanto a reutilización de código en la capa de presentación y por consecuencia eleva la mantenibilidad de esta capa al usar facelets nuestro proyecto se basará en una plantilla, que contendrá la estructura de la presentación (jsp) y las definiciones de estilo, en esta plantilla definimos zonas o áreas (como el header, menú, espacios comunes) y el motor de facelets se encargará de llenar esas áreas con el contenido apropiado, así por ejemplo no tendremos el header en todas las jsp y si después de un tiempo algo tiene que cambiar se hará solo en la plantilla en lugar de hacerlo en cada página Este framework incluye muchas 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 manera diferente: JSP crea output ni bien encuentra código JSP (es decir procesa los elementos de la página de arriba a abajo), mientras que JSF dicta su propio re-rendering (ya que su ciclo de vida está dividido en fases marcadas). Facelets llena este vacío entre JSP y JSF, siendo una tecnología centrada en crear árboles de componentes y estar relacionado con el complejo ciclo de 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 y facilidad en el mantenimiento de grandes aplicaciones.



Permite crear componentes ligeros sin necesidad de crear los tags de los UIComponents (es más fácil comparado a crear un componente JSF puro).



Soporta Unified Expression Language, incluyendo soporte para funciones EL y validación de EL en tiempo de compilación. Cuando se hizo JSF la intencion era usar JSP como la principal tecnologia para crear paginas. Por desgracia, JSP y JSF no se comlpementan el uno al otro. JSP se usa para crear contenido estatico o dinamico que se procesa de arriba a abajo pero no sirve para crear arboles de componentes. JSF, por su parte, tiene un ciclo de vida mucho mas complejo que JSP y la generacion y el renderizado de los componentes ocurre en diferentes fases del ciclo. Facelets se hizo para rellenar esa carencia. Es una tecnologia que permite crear arboles de componentes que, a la vez, puede intercambiar contenido con el complejo ciclo de vida de los JSF. Facelets sustituye JSP con una API muy directa que refleja perfectamente sus principios de simplicidad, y a su vez, incorpora algunas funcionalidades para el desarrollador.

TEMPLATING Existen

tres

maneras

de

modularizar

las

páginas

y

componentes: includes, archivos tag y decorators. Pero primero algo básico de templating:

TRES MANERAS DE MODULARIZAR CON FACELETS Esta es la porción de código que se abstraerá para los ejemplos siguientes:

Bienvenido, #{usuario.nombre}



TEMPLATING MEDIANTE ‘INCLUDES’ Este es el método más familiar para modularizar componentes (se le pueden pasar parámetros al ‘ui:include’).



TEMPLATING MEDIANTE UN ‘TAG FILE’ Para esta manera de templating, al tag se le da un namespace, por ejemplo:

...

TEMPLATING MEDIANTE ‘DECORATORS’ Los decorators se pueden usar de la misma manera que los compositions, pero éstos pueden ser insertados en la página (inline). El texto anterior se mostrará.

El texto posterior se mostrará.

¿PERO EN REALIDAD QUE ES FACELETS?, para entenderlo enumerare sus características: 

Es un framework para trabajar con plantillas.



Creación de componentes personalizados.



Utilización de etiquetas lógicas.

¿PERO QUE DIFERENCIA FACELETS DE LOS JSP? 

JSP son etiquetas para plantillas que al compilarse generan servlets.



Facelets es un lenguaje de plantillas para construir un árbol de componentes, no un servlet.



Por otra parte Facelet fue creado para cumplir con el ciclo de vida de JSF, al contrario de los JSP que el ciclo de vida de los servlet producidos es independiente al de JSF.

EL SISTEMA DE PLANTILLAS DE FACELETS. Las plantillas nos evitan problemas, nos abaratan recursos, nos da un formato uniforme a la aplicación, nos centraliza la vista que es común a todas las páginas. Supongamos que no usamos plantillas, y tenemos 4 paginas distintas, al no tener una plantilla repetiríamos el mismo código html (u otro) en todas las paginas, generándonos espacio, y si quisierasmo modificar un menú por ejemplo, deberíamos modificarlos en cada una de las paginas de nuestra aplicación, con las plantillas solo tenemos un menú, que es referenciado a las demás paginas y al modificar solo modificamos una vez y este cambio se reflejan en todas las paginas que hagan uso de la plantilla modificada. JavaServer Facelets 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 incluye muchas 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



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.

Habilidad de separar los UIComponents en diferentes archivos.

A partir de JSF 2.0, facelets viene incorporado, anteriormente había que incluir y configurar la librería por separado, ahora y con la ayuda de netbeans esto se hace menos trabajoso. El sistema de plantillas es el mismo que teníamos con JSF 1.2, y se basa en el uso de las siguientes etiquetas: 

ui:composition: envuelve un conjunto de componentes para ser reutilizados en otra página, es la etiqueta que:  envuelve o puede envolver la plantilla.  se utiliza para hacer referencia a una plantilla.

Todo lo que quede fuera de la etiqueta ui:composition no será renderizado. 

 

 

ui:define: define un contenido nombrado para ser insertado en una plantilla, su contenido es un conjunto de componentes y se identifica con un name. Ese conjunto de componentes será insertado en una etiqueta ui:insert con el mismo name. ui:insert: declara un contenido nombrado que debe ser definido en otra página, ui:decorate: es la etiqueta que sirve para hacer referencia a una plantilla, como la etiqueta ui:composition, solo que con ui:decorate lo definido antes y después de la etiqueta sí será renderizado, ui:param: nos sirve para declarar parámetros y su valor en el uso de plantillas y componentes por composición, ui:include: es una etiqueta que sirve para incluir en una página el contenido de otra, como si el contenido de esta última formase parte de la primera.

COMPONENTES POR COMPOSICIÓN. Los componentes por composición son un tipo especial de plantillas que actúan como componentes. Un componente por composición es una pieza de código reutilizable que proporciona cierta funcionalidad y consiste en una colección de otros componentes que ya existen. Con facelets, cualquier página xhtml puede convertirse en un componente por composición, haciendo uso de las siguientes etiquetas:

 

 







composite:interface: declara el contrato de uso del componente por composición. composite:implementation: define la implementación del componente por composición. Si existe un composite:interface, debe existir su composite:implementation correspondiente. composite:attribute: declara un atributo en el contrato del componente, en la interface. Es una etiqueta hija de composite:interface. composite:insertChildren: sustituye a la etiqueta ui:insert que antes usábamos en el componente para insertar el conjunto de nodos hijos que se puede declarar dentro del etiquetado que hace uso del componente por composición. Se incluye dentro de la etiqueta composite:implementation. composite:valueHolder: permite exponer las propiedades y eventos de los componentes que implementan la interfaz ValueHolder para que sean asignados desde el cliente que hace uso del componente por composición. Los componentes que implementan EditableValueHolder son todos aquellos que soportan el acceso a propiedades del lado de los ManagedBeans a través de Expression Language y la posibilidad de asignar a dicha vinculación un conversor (outputText, outputLabel, outputFormat,...) composite:editableValueHolder: permite exponer las propiedades y eventos de los componentes que implementan la interfaz EditableValueHolder para que sean asignados desde el cliente que hace uso del componente por composición. EditableValueHolder es una extensión de ValueHolder que permite asociar al componente que la implementa validadores y eventos de cambio de valor (inputText, inputSecret, selectOneMenu, selectManyMenu, selectBooleanCheckBox,...). composite:actionSource: permite exponer las propiedades y eventos de los componentes que implementan la interfaz ActionSource para que sean asignados desde el cliente que hace uso del componente por composición. Los componentes que implementan ActionSource son aquellos que soportan eventos de acción y listeners de eventos de acción (commandButton y commandLink).

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=jsf2FaceletsTemplatesAnd CompositeComponents http://www.compujuy.com.ar/postx.php?id=91

http://nubumu.blogspot.mx/2008/10/facelets.html http://blogs.antartec.com/desarrolloweb/2008/12/facelets-y-jsf-uso-de-templates/