(facelets en jsf 2_ sistema de plantillas y componentes por composición.)

Upload: outrera

Post on 07-Jul-2015

835 views

Category:

Documents


0 download

TRANSCRIPT

E-mail: Contrasea:

EntrarDeseo registrarme He olvidado mis datos de acceso Inicio Quines somos Tutoriales Tutoriales Formacin Comparador de salarios Nuestro libro Charlas Ms

Ests en: Inicio

Facelets en JSF 2: sistema de plantillas y componentes por composicin.

DESARROLLADO POR: Jose Manuel Snchez Surez

Catlogo de servicios Autentia

C onsultor tecnolgico de desarrollo de proyectos informticos. Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factora y formacin Somos expertos en Java/J2EE

ltimas Noticias

Fecha de publicacin del tutorial: 2010-04-20Share | Regstrate para votar

13.419

Pirineos on Tour VII Autentia C ycling Day Autentia patrocina la charla sobre Java SE 7 en Madrid Alfresco Day 2011

Facelets en JSF 2: sistema de plantillas y componentes por composicin.

0. ndice de contenidos.1. Introduccin. 2. Entorno. 3. El sistema de plantillas de Facelets. 3.1. Definicin de la plantilla de la aplicacin. 3.2. Definicin de la plantilla de men. 3.3. Uso de la plantilla. 4. C omponentes por composicin. 4.1. C onfiguracin. 4.2. C reacin de un componente por composicin. 4.3. Uso de un componente por composicin. 4.4. Exponer las propiedades y comportamientos de los componentes de un componente por composicin. 5. Referencias. 6. C onclusiones.

XVII C harla Autentia Grails - Vdeos y Material

Histrico de NOTIC IAS

ltimos TutorialesAndroid: Leer correos de Gmail Exportacin del contenido de un dataTable de JSF con el soporte de Primefaces Spring schedule annotations Primeros pasos con Google+ Spring Security, Single Sign-On bajo plataformas Windows con Active Directory y Kerberos V5

1. Introduccin.Ahora que ya conocemos las principales novedades de JSF 2 de la mano de Alejandro, en este tutorial vamos a realizar una introduccin al uso de Facelets en JSF 2, el sistema de plantillas estndar de facto en la versin 1.2 de JSF y que ahora, en la versin 2, forma parte de la propia especificacin. C on JSF 1.2, la versin anterior, exista la posibilidad de utilizar otros sistemas de plantillas: Tiles de Apache (siempre ms ligado al uso de Struts), JsfTemplating (asociado a Woodstock) o JTPL de IBM el sistema de plantillas estndar del entorno de desarrollo de IBM; si bien, para los que apostamos por facelets, al ver las mltiples ventajas frente a estos otros sistemas, ahora nos encontramos con que se soporta por defecto, puesto que ya forma parte del estndar y ya tenemos parte del camino recorrido. Es ms: ahora Facelets es el sistema por defecto para crear vistas basadas en rboles de componentes JSF, en detrimento de JSP, ya no hay que configurar el soporte de Facelets, al contrario, hay que habilitar el modo de compatibilidad con JSP, si queremos seguir usndolo. ninguna de las nuevas caractersticas de JSF 2 (el soporte nativo para Ajax, la gestin de eventos del ciclo de vida desde la vista, por supuesto la nueva definicin de componentes por composicin,...) estn disponibles usando JSP. En resumen, quien no haya migrado sus vistas de JSP a Facelets, ahora se va a perder lo bueno de JSF 2. C entrndonos en Facelets, a "grosso modo", en JSF 2: hace uso del mismo sistema de plantillas que venamos usando hasta ahora en JSF 1.2, y mejora la creacin de componentes por composicin, reduciendo complejidad en su configuracin y aadiendo rigidez en su parametrizacin, puesto que ahora vamos a tener la posibilidad de definir qu atributos acepta el componente por composicin, adems de exponer el comportamiento de los componentes que incluye. Esto no significa que los componentes por composicin que ya tenemos creados, basndonos en JSF 1.2, los tengamos que re-escribir para JSF 2, porque son totalmente vlidos.

ltimos Tutoriales del AutorExportacin del contenido de un dataTable de JSF con el soporte de Primefaces Spring schedule annotations Expression Language 2.2 en Tomcat 6: invocar a un mtodo de un ManagedBean en JSF pasando parmetros. Spring cache abstraction.

2. Entorno.El tutorial est escrito usando el siguiente entorno:

Hardware: Porttil MacBook Pro 17' (2.93 GHz Intel C ore 2 Duo, 4GB DDR3 SDRAM). Sistema Operativo: Mac OS X Snow Leopard 10.6.1 JDK 1.6.0_17. Maven 2.2.1. Eclipse 3.5: Ganymede, con IAM (plugin para Maven). Apache Tomcat 6.0.20. JSF 2 (2.0.2)

Bsquedas "facetadas" en Solr con el soporte de Solrj.

Sguenos a travs de:

3. El sistema de plantillas de Facelets.C omo he comentado en la introduccin, el sistema de plantillas es el mismo que tenamos 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 pgina, 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 pgina, 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 despus de la etiqueta s ser renderizado, ui:param: nos sirve para declarar parmetros y su valor en el uso de plantillas y componentes por composicin, ui:include: es una etiqueta que sirve para incluir en una pgina el contenido de otra, como si el contenido de esta ltima formase parte de la primera.

ltimas ofertas de empleo2011-07-06

Otras Sin catalogar LUGO.2011-06-20

C omercial - Ventas SEVILLA.2011-05-24

3.1. Definicin de la plantilla de aplicacin. Siguiendo las recomendaciones de facelets, las plantillas las incluiremos dentro del directorio WEB-INF/facelets/templates/, de modo que no sean visibles desde el contenedor web. Un ejemplo de plantilla, defaultLayout.xhtml, podra ser el siguiente: 01 02 03 04 06 07 08 09 10 11 12 13 14

C ontabilidad - Expecialista C ontable - BARC ELONA.2011-05-14

C omercial - Ventas TARRAGONA.2011-04-13

C omercial - Ventas VALENC IA.

Jose Manuel Snchez

sanchezsuarezj

15 16 17 18 19 20 21 Pgina en construccin 22 23 24 25 26 27 28 29 30 Definimos una maquetacin por capas y el contenido de nuestro site en tres secciones: header, content y footer Prevemos la inclusin de la definicin externa de dos contenidos nombrados: title (lnea 10) y content (lnea 20), de modo que la pgina que haga uso de la plantilla debe definir tales contenidos. Si no los define podemos prever un valor por defecto, en el caso de content "Pgina en construccin". Por ltimo, hemos hecho una inclusin en la lnea 16 del contenido de una mini-plantilla, que contendr el men de la aplicacin.

[Reader] Exportacin del contenido de un dataTable de JSF con el soporte de Primefaces http://bit.ly/pH92kE #java #javagt7 hours ago reply retw eet fav orite

@adictosaltrabaj > http://t.co/FlrYIgT: cmo configurar una tarea con el soporte de spring y quartz con anotaciones.2 day s ago reply retw eet fav orite

Profe, no va el envo de imgenes en los emails!, incluyo el cdigo pero aparece en verde y no se ejecuta. Anda, prueba a descomentarlo!! ;)21 day s ago reply retw eet fav orite

Join the conversation3.2. Definicin de la plantilla de men. La plantilla del men la ubicamos en el mismo directorio que la plantilla de aplicacin y podra tener el siguiente contenido: 01 02 05 06 07 08 09 10 11 12 13 14 15 16 Estamos haciendo uso de un componente visual de la librera de componentes primefaces, que soporta JSF 2, que renderiza el contenido de un rbol jerrquico de items como un men.

3.3. Uso de la plantilla. Por ltimo, las pginas que hagan uso de la plantilla tendrn un contenido similar al siguiente: 01 02 03 04 06 07 08 09 10 11 12 13 14 15 16 17 18 De este modo, en el nico punto en el que se define la estructura del site es en la plantilla y el cdigo de las pginas queda centrado en el contenido individual de cada una de ellas y no nos repetimos - Please DRY: Don't Repeat Yourself -.

4. Componentes por composicin.Los componentes por composicin son un tipo especial de plantillas que actan como componentes. Un componente por composicin es una pieza de cdigo reutilizable que proporciona cierta funcionalidad y consiste en una coleccin de otros componentes que ya existen. C on facelets, cualquier pgina xhtml puede convertirse en un componente por composicin, haciendo uso de las siguientes etiquetas: composite:interface: declara el contrato de uso del componente por composicin. composite:implementation: define la implementacin del componente por composicin. 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 usbamos en el componente para insertar el conjunto de nodos hijos que se puede declarar dentro del etiquetado que hace uso del componente por composicin. 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 composicin. Los componentes que implementan EditableValueHolder son todos aquellos que soportan el acceso a propiedades del

lado de los ManagedBeans a travs de Expression Language y la posibilidad de asignar a dicha vinculacin 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 composicin. EditableValueHolder es una extensin de ValueHolder que permite asociar al componente que la implementa validadores y eventos de cambio de valor (inputText, inputSecret, selectOneMenu, selectManyMenu, selectBooleanC heckBox,...). 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 composicin. Los componentes que implementan ActionSource son aquellos que soportan eventos de accin y listeners de eventos de accin (commandButton y commandLink).

4.1. Configuracin.JSF 2 deja abierta la posibilidad de configurar nuestros componentes por composicin a travs de la declaracin de los mismos en una taglib e incluyndola en el descriptor de despliegue web.xml. Si bien, adems, haciendo uso del concepto de convencin sobre configuracin, nos hace transparente dicha configuracin de modo que nos propone un prefijo de URI predefinida para hacer referencia a los mismos y el sufijo vendr dado por el directorio en el que se encuentren los xhtml que implementan los componentes por composicin. Es tan sencillo, como crear nuestros componentes bajo una estructura de directorios components/autentia dentro de la carpeta de recursos (resources) para que, cuando se empaquete se incluya dentro del directorio WEB-INF o META-INF. De este modo todos los xhtml que contengan la declaracin de componente sern incluidos en una librera de componentes cuya URI tendr una parte fija (http://java.sun.com/jsf/composite/) y un sufijo que se corresponder con la estructura de directorios en el que est incluido (components/autentia). El nombre del componente ser el nombre del fichero xhtml. As, podemos mantener la siguiente estructura de directorios:

e incluir el espacio de nombres de los mismos en nuestros xhtml de la siguiente forma: 1 3 5 ...

4.2. Creacin de un componente por composicin.

Para definir un componente por composicin en JSF 2, ahora se requiere la definicin de la interfaz y la implementacin. Qu mejor que mostrar un componente complejo para entenderlo, se trata de un componente de entrada de datos que encapsula la etiqueta, el propio componente de entrada y el componente de mensajes asociado al anterior. 01 03 08 09 10 This will not be present in rendered output 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 Ahora tenemos: por un lado la definicin de la interfaz en la que se pueden definir los parmetros que recibir o puede recibir el componente incluidos en la etiqueta composite:interface, esto es bastante til porque eliminamos la necesidad de

incluir tediosos bloques de