Facelets
En informática, Facelets es un sistema de código abierto de plantillas web bajo la Licencia Apache y la tecnología de controlador de JavaServer Faces (JSF). El lenguaje requiere documentos XML de entrada válidos para trabajar. Facelets es compatible con todos los componentes de la interfaz de usuario de JSF y se centra por completo en la construcción del árbol de componentes, lo que refleja el punto de vista de una aplicación JSF.
Facelets | ||
---|---|---|
Información general | ||
Tipo de programa | Web template system | |
Licencia | licencia Apache | |
Información técnica | ||
Programado en | Java | |
Versiones | ||
Última versión estable | 2.0 ( 28 de junio de 2009 (15 años, 4 meses y 20 días)) | |
Enlaces | ||
Aunque ambas tecnologías JSF y JSP han mejorado para trabajar mejor juntas, Facelets elimina los problemas señalados en el artículo de Hans Bergsten "Improving JSF by Dumping JSP".[1]
Facelets se basa en algunas de las ideas de Apache Tapestry,[2][3] y es lo suficientemente similar para hacer una comparación. El proyecto es conceptualmente similar a Tapestry, que trata los bloques de los elementos HTML como componentes del marco apoyados por las clases de Java. Facelets también tiene algunas similitudes con el framework Apache Tiles con respecto al soporte de plantillas, así como en la composición.
Facelets fue creado originalmente por Jacob Hookom en 2005[3] como una visión alternativa al lenguaje para JavaServer Faces (JSF) 1.1 y JavaServer Faces (JSF) 1.2, que utiliza tanto JSP como lenguaje por defecto. A partir de JSF 2.0, Facelets ha sido promovido por el grupo de expertos JavaServer Faces (JSF) siendo el lenguaje por defecto. JSP ha quedado obsoleto en forma de legado (legacy).[4][5]
Conversión de elementos
editarEn Facelets se pueden introducir plantillas de etiquetas desde una biblioteca de etiquetas de dos formas:
- Directamente como un elemento xml calificado
- Indirectamente a través del
JSFC
como atributo de un elemento no calificado arbitrariamente.
En este último caso el compilador Facelet ignorará el elemento actual y procesará el elemento que era dado por JSFC
.
El siguiente ejemplo muestra el uso directo de las etiquetas calificadas:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
<body>
<h:form>
<h:outputText value="Welcome, #{loggedInUser.name}" disabled="#{empty loggedInUser}" />
<h:inputText value="#{bean.property}" />
<h:commandButton value="OK" action="#{bean.doSomething}" />
</h:form>
</body>
</html>
Uso del atributo JSFC
, el mismo código también se puede expresar como el ejemplo dado a continuación:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
<body>
<form jsfc="h:form">
<span jsfc="h:outputText" value="Welcome, #{loggedInUser.name}" disabled="#{empty loggedInUser}" />
<input type="text" jsfc="h:inputText" value="#{bean.property}" />
<input type="submit" jsfc="h:commandButton" value="OK" action="#{bean.doSomething}" />
</form>
</body>
</html>
Reutilización de contenido
editarAdemás de las plantillas, Facelets provee apoyo para su reutilización al permitir al usuario incluir contenido que reside en un archivo diferente. Incluyendo dicho contenido se puede realizar en 3 formas diferentes:
- Hacer referencia a un archivo
- Las etiquetas personalizadas
- Componentes compuestos
Referencia a un archivo
editarLa forma más sencilla para incluir el contenido de otro Facelet hace referencia por su nombre utilizando la etiqueta <ui:include>
.[6][7] Esto hace que el contenido en el archivo de referencia para ser incluido directamente en el facelet que llama por el compilador Facelets. Además de la reutilización de contenidos en múltiples lugares, esto puede ser utilizado para romper un gran Facelet en partes más pequeñas.
A continuación un ejemplo:
templates/master_template.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<ui:include src="html_head.xhtml" />
<h:body>
Standard header text for every page.
<ui:insert name="body_content" />
Standard footer text for every page.
</h:body>
</html>
html_head.xhtml
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
>
<h:head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
<meta http-equiv="pragma" content="no-cache"/>
</h:head>
</ui:composition>
Etiquetas personalizadas
editarFacelets soporta indirection para la inclusión de contenidos a través de encargo Dicha etiqueta personalizada puede estar asociada con una Facelet en taglib archivo. Los casos de esa etiqueta serán luego reemplazadas por el contenido de la Facelet asociada.
A continuación se muestra un ejemplo de esto:
templates/master_template.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:my="http://example.com/my"
>
<ui:include src="html_head.xhtml" />
<h:body>
Standard header text for every page.
<my:spacer>
<ui:insert name="body_content" />
Standard footer text for every page.
</h:body>
</html>
El código anterior utiliza la etiqueta <my:spacer>
para marcar el punto en el Facelet donde el contenido se va a insertar. Tal etiqueta tiene que ser declarada en un archivo Taglib donde puede estar asociada con un Facelet de la siguiente manera:
example.taglib.xml
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib
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-facelettaglibrary_2_0.xsd"
version="2.0"
>
<namespace>http://example.com/my</namespace>
<tag>
<tag-name>spacer</tag-name>
</tag>
</facelet-taglib>
A continuación se muestra un ejemplo de lo que el contenido real de Facelet podría ser:
spacer.xhtml
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
>
<h:outputText value="&nbsp;" escape="false"/>
</ui:composition>
Componentes compuestos
editarAdemás de incluir el contenido directamente, Facelets proporciona el mecanismo de componente compuesto que hace al contenido disponible como un componente de primera clase JSF.[8][9] Los componentes compuestos no necesitan ser declaradas en un archivo Taglib, sino que tienen que ser puestos en un directorio especial. Via convención sobre configuración al contenido se le asigna automáticamente un espacio de nombres y un nombre de etiqueta. El espacio de nombres se construye de la cuerda fija 'http://java.sun.com/jsf/composite/' concatenado con el nombre del directorio en el que reside el archivo de contenido con respecto al directorio de los "recursos". [17] El nombre de la etiqueta se convierte en el nombre del archivo sin la extensión. sufijo .xhtml
A continuación se muestra un ejemplo de esto:
resources/my/spacer.xhtml
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite"
>
<cc:interface/>
<cc:implementation>
<h:outputText value="&nbsp;" escape="false"/>
</cc:implementation>
</ui:composition>
El Facelet de arriba está disponible de forma automática como un componente de espacio de nombres 'http://java.sun.com/jsf/composite/my' y con nombre de tag 'spacer'.
Véase también
editarReferencias
editar- ↑ Hans Bergsten (6 de junio de 2004). «Improving JSF by Dumping JSP» (en inglés). O'Reilly Media.
- ↑ https://web.archive.org/web/20070706220453/https://facelets.dev.java.net/
- ↑ a b https://web.archive.org/web/20130113100928/http://www.jsfcentral.com/articles/facelets_1.html
- ↑ JavaServer Faces 2.0, The Complete Reference by Ed Burns and Chris Schal, page 55: 'The expert group decided to move forward with Facelets as the basis for new features while letting JSP remain as a backward compatibility layer'.
- ↑ JSF 2.0 (JSR 314, http://jcp.org/en/jsr/detail?id=314) specification, maintenance release 2, section 10.1: 'Facelets is a replacement for JSP that was designed from the outset with JSF in mind. New features introduced in version 2 and later are only exposed to page authors using Facelets. JSP is retained for backwards compatibility.'
- ↑ http://download.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/ui/include.html
- ↑ http://pilhuhn.blogspot.com/2009/12/facelets-uiinclude-considered-powerful.html
- ↑ http://download.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/composite/tld-summary.html
- ↑ http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/#composite-components
Bibliografía
editar- Wadia, Zubin; Marinschek, Martin; Saleh, Hazem; Byrne, Dennis (22 de septiembre de 2008). The Definitive Guide to Apache MyFaces and Facelets (1st edición). Apress. p. 400. ISBN 978-1-59059-737-8. Archivado desde el original el 2 de enero de 2010. Consultado el 19 de junio de 2013.
- Wadia, Zubin; Aranda, Bruno (26 de mayo de 2008). Facelets Essentials: Guide to JavaServer Faces View Definition Framework (1st edición). Apress. p. 84. ISBN 978-1-4302-1049-8. Archivado desde el original el 8 de enero de 2010. Consultado el 19 de junio de 2013.
Enlaces externos
editar- Página web de Facelets
- Facelets comparado con Tiles
- Documentación para desarrolladores de Facelets
- Esta obra contiene una traducción derivada de «Facelets» de Wikipedia en inglés, concretamente de esta versión del 19 de junio de 2013, publicada por sus editores bajo la Licencia de documentación libre de GNU y la Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.