Componentes compuestos en JSF 2
Los componentes compuestos JSF 2 son un mecanismo muy potente de extensión JSF 2 sin recurrir a código. Originalmente derivado de un mecanismo similar existente en Facelets la incorporación de estos al estándar JSF 2 ha permitido la evolución de esta técnica.
JSF’s strength has always been its component model, but that strength wasn’t fully realized until now because it was difficult to implement custom components with JSF 1. You had to write Java code, specify XML configuration, and have a good grasp of JSF’s life cycle. With JSF 2, you can implement custom components:
Declaración como recursos
Un componente compuesto es cualquier fichero escrito mediante Facelets y puesto bajo el directorio resources, tal como habíamos hecho con las imágenes, CSS, etc. Por ejemplo si tenemos una libreria (directorio) dentro de resources con un fichero loginPanel.xhtml se puede utilizar este componente declarando un espacio de nombres XML (namespace):
xmlns:ez="http://java.sun.com/jsf/composite/ezcomp"
Y utilizando la etiqueta correspondiente:
<ez:loginPanel />
Sintaxis
Cualquier fragmento de Facelet es válido, incluyendo la utilización de otros componentes o las plantillas de Facelets. El único requisito es la declaración de la interfaz y la implementación con las siguientes etiquetas:
Otras etiquetas
<composite:attribute>
<composite:editableValueHolder>
<composite:actionSource>
Parametrización del componente
Podemos declarar atributos que actúen como parámetros del componente.Los declaramos en la interfaz como:
<composite:attribute name="imatge"/>
Y podemos acceder a la implementación mediante la variable ‘cc’ que se resuelve con el EL como el propio componente. ‘cc’ corresponde con composite component.
<h:graphicImage value="#{cc.attrs.imatge}"/>
Parámetros opcionales con valores por defecte
<composite:attribute name="styleClass" default="icon" required="false"/>
Ejemplo
loginPanel.xhtml
Referencias
- http://www.ibm.com/developerworks/java/library/j-jsf2fu2/index.html
- Especificación JSF 2.0
- En este blog: Novedades en JSF 2