Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación IV
Clase Teórica Nº 5
Fundamentos del framework JavaServer Faces (JSF).
Objetivos
Introducción
-JavaServer Faces (JSF) es otro entorno de desarrollo de aplicaciones Web en Java, diferente al de los Servlets
que hemos visto hasta ahora. Es un entorno de trabajo (integrado en NetBeans) para desarrollar aplicaciones web
Java del lado del servidor.
Esta tecnología está diseñada para simplificar el desarrollo Web con Java, y fomenta la separación de la
presentación de las interfaces de usuario con la lógica de la aplicación.
JSF utilizaba JSPs, añadiendo librerías que contienen componentes de alto nivel (menús, paneles, campos de
texto, etc.), cada uno de estos componentes puede interactuar con el servidor de forma independiente. En la
actualidad, se utilizan “Facelets” que son páginas con extensión xhtml que sirven para lo mismo que las JSF pero
son una forma más sencilla de trabajar.
Como JavaServer Faces es un “framework”, simplifica el diseño de la estructura de la aplicación y también
proporciona librerías que hacen más fácil el desarrollo de la aplicación.
Con JavaServer Faces es posible utilizar Ajax (Asynchronous JavaScript and XML). Ajax es un enfoque en el
que las diferentes acciones que solicita el usuario se realizan dentro de una misma página, de tal manera que el
servidor no genera una nueva página sino sólo los datos.
En las aplicaciones tradicionales, cada petición al servidor hace que éste genere una nueva página
HTML/XHTML.
Las aplicaciones RIA (Rich Internet Applications), como lo es JSF, intentan simular las aplicaciones de
escritorio y, cuando usan Ajax, son más rápidas que las aplicaciones tradicionales.
Desarrollo
______________________________________________________________________________________________________________
Ciclo 02 – 2023 13
Programación IV
Por ser un estándar de Java, la tecnología cuenta con el apoyo de una industria muy sólida.
Esta tecnología ha crecido mucho en su uso a nivel mundial. Cuenta con un fuerte apoyo de IDEs de Java
(NetBeans, Eclipse, IntelliJ IDEA y otros), así como de servidores de aplicaciones con el objetivo de soportar y
desplegar las aplicaciones creadas con este framework.
La tecnología JSF incluye:
Una interfaz de programación (API) que permite manipular los componentes típicos de una interfaz
gráfica (formularios, cajas de texto, botones, listas, tablas, objetos de acceso a datos, etc.), permite
manipular eventos, proporciona validación y conversión de datos en el lado del servidor y navegación
entre páginas, además de otras características.
Dos bibliotecas de etiquetas JSP personalizadas (etiquetas JSF) para proporcionar los componentes de la
interfaz gráfica y para conectar los componentes a objetos en el lado del servidor.
JSF contiene dos importantes componentes de software: las Tag Libraries y los Managed Beans.
Tag Libraries.
Los Facelets son páginas .xhtml con librerías adicionales llamadas Tag libraries. Las librerías de etiquetas (tag
libraries) son componentes especiales de software que encapsulan funcionalidad dinámica y compleja. Estas
librerías las construyen especialistas en ciertos servicios, como, por ejemplo: el acceso a la base de datos, o el
manejo de botones, menús, desplegado de listas, etc. La idea principal es que el diseñador de las vistas pueda
incorporar poderoso contenido dinámico en sus páginas sin necesidad de saber cómo se codifican los detalles.
JSTL (JavaServer pages Standard Tag Library) es una librería que contiene la funcionalidad más común de
las aplicaciones Web. Los diseñadores de páginas Web sólo deben saber cómo incluir los tags. JSF proporciona
componentes para construir una aplicación con GUIs (Graphical User Interfaces: Interfaces de Usuario
______________________________________________________________________________________________________________
Ciclo 02 – 2023 14
Programación IV
Gráficas). El desarrollador personaliza objetos como menús, check box, botones, etc. manipulando los atributos
de los tags de cada uno de estos componentes.
Cuando creamos un proyecto en JavaServer Faces en NetBeans, se generan XHTML, las cual se llaman Facelets,
y ya tienen incluidas las Tag libraries.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 15
Programación IV
Un conjunto de páginas JSP. JSF también admite otras tecnologías de presentación, por ejemplo,
Facelets.
Etiquetas personalizadas para representar objetos en las páginas.
Un conjunto de componentes JavaBeans (beans de apoyo) que definen las propiedades y funciones de
los componentes de la interfaz gráfica.
Objetos creados por el programador de la aplicación, como componentes personalizados, validadores,
convertidores o escuchadores de eventos.
Archivos de configuración para definir las reglas de navegación entre páginas, así como para configurar
beans y otros objetos.
Un descriptor de despliegue (archivo web.xml).
JSF implementa el patrón de diseño MVC con una amplia separación de responsabilidades.
El modelo contiene datos de la UI y es el responsable de almacenar los datos de la aplicación web. Se puede
implementar con clases puras de Java, conocidas como POJO (Plain Old Java Object) o con ManagedBean
de Modelo; estos no contienen lógica de la aplicación ni administran el flujo de la misma.
La vista define la UI con una jerarquía de componentes, utiliza la librería estándar de JSF, tecnologías como EL
(Expression Language), JSTL (Java Estándar Tag Library) para facilitar el despliegue de la información del
modelo. La tecnología utilizada por defecto en JSF 2.0 son los Facelets, que son páginas .xhtml.
El controlador maneja las interacciones del usuario y el flujo de la aplicación, se implementa con ManagedBean
de control. Recordar que un controlador realiza las siguientes funciones: recepción/validación de peticiones,
selección de la lógica a ejecutar y selección de la vista a en la que se presentará el resultado.
El lenguaje XHTML (Extensible HyperText Markup Language) es otro lenguaje de marcado de texto que se
caracteriza por la separación de la estructura de la información con la presentación de la página. XHTML se basa
en HTML, pero utiliza un archivo adicional con extensión CSS (Cascading Style Sheets) para definir la
presentación de la página. La presentación es la especificación del lugar en donde el navegador presenta cada
elemento de la página Web, del font, y de los colores de cada uno de los elementos a desplegar.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 16
Programación IV
Una de las características más importantes del XHTML es que tanto el texto como las imágenes pueden ser
hipervínculos.
Tecnología Facelets.
Los Facelets son la tecnología estándar de despliegue en JSF. Pueden ser hasta un 30% más rápido en el análisis
y elaboración de páginas de despliegue.
Una de sus principales ventajas, es que fueron creados tomando en cuenta el ciclo de vida de JSF.
Al ejecutar un Facelet, todos los componentes JSF se convierten a instancias Java y son administradas por un
Componet Tree (es una clase Java).
Todos los componentes JSF se derivan de la clase abstracta “javax.faces.component.UIComponent”.
El estado de los componentes (Componet Tree) puede almacenarse del lado del cliente o del lado del servidor.
Al utilizar Facelets es más sencillo encapsular código y así crear componentes reutilizables. Permiten crear
plantillas y definir más fácilmente nuevas vistas a partir de plantillas definidas.
El otro uso de commandButton es transferir el control hacia el método de un Bean, como en el siguiente
ejemplo, en el que al seleccionar el botón “Ingresar” el control pasa al método validarUsuario() del Bean
loginBean:
<h:commandButton value=”Ingresar” action=”#{loginBean.validarUsuario}”/>
______________________________________________________________________________________________________________
Ciclo 02 – 2023 17
Programación IV
Opcionalmente, como solicitud de la petición podría simplemente redireccionar a algún caso de navegación, es
decir, pasar del paso 2 al 6, simplemente para seleccionar una página a redireccionar.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 18
Programación IV
Por lo tanto, desarrollar una aplicación JSF requiere de las siguientes tareas:
Establecer una correspondencia “petición-objeto FacesServlet”, ya que con la tecnología JSF es un
objeto de la clase FacesServlet el encargado de recibir la petición del usuario.
Crear las páginas utilizando las bibliotecas de etiquetas JSP personalizadas.
Definir la navegación entre páginas en el archivo de configuración correspondiente (faces-config.xml).
Desarrollar los beans de apoyo.
Añadir las declaraciones de los beans al archivo de configuración correspondiente (faces-config.xml).
Dinámica: el valor de la siguiente vista a seleccionar depende de la acción que ejecute el usuario y la
cadena de retorno del método “action” ejecutado.
En la navegación dinámica se ejecuta un método del Managed Bean asociado, cuando el usuario
selecciona un botón de la página Web. En este Bean se inicia el proceso de la información, y la página
destino se determina después de que se finaliza este proceso.
Navegación explícita: se define la navegación dentro del archivo faces-config.xml, se debe agregar un
elemento XML que permita indicar de dónde proviene la petición, cuál es su salida y hacia qué página
debe dirigirse.
Navegación estática.
En la navegación estática, el elemento para definir cuál es la siguiente página a mostrar es una cadena y se le
conoce como salida o en inglés “outcome”.
La navegación estática aplica en los siguientes casos:
No se requiere ejecutar código Java del lado del servidor, sino únicamente redirigir a otra página.
Cuando no hay una lógica para determinar la siguiente página a mostrar.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 19
Programación IV
Un ejemplo de una navegación estática es al utilizar una página JSF que inicia una petición y vamos a indicar
por ejemplo, con un botón de tipo command una acción, en el cual estamos indicando la acción de login.
<h:commandButton label=”Entrar” action=”login” />
Esta acción del login como podemos observar, simplemente es una cadena, en este caso la siguiente página a
mostrar puede determinarse de dos maneras:
a. Outcome por defecto, buscar directamente la página login.xhtml, esta página se va a buscar en el mismo
directorio donde se encuentra la página que inició la petición.
b. Buscar el uutcome en el archivo faces-config.xml, encontrando el caso de navegación que determina la
siguiente página a mostrar.
Navegación dinámica.
Utiliza un método conocido como “action”, el cual tiene la lógica para determinar la salida u outcome.
Podemos observar un ejemplo:
En este caso estamos utilizando Expression Language y estamos utilizando un bean llamado login y llamamos a
un método verificarUsuario. Este método es el que va a tener la lógica para seleccionar la siguiente página
mostrar.
Si vemos la lógica del Managed Bean, verificamos que dependiendo de cierta condición puede regresar la
cadena “éxito” o la cadena “fallo”. A través de esta cadena se seleccionará finalmente la página siguiente a
mostrar, intentará buscar una página exito.xhtml dentro del mismo directorio, si no lo encontrará entonces
buscará dentro del archivo faces-config.xml un caso de navegación que tenga como outcome la palabra “éxito” o
la palabra “fallo” y dependiendo de esto seleccionará la siguiente vista a mostrar.
Reglas de navegación.
Para definir las reglas de navegación debemos utilizar el archivo faces-config.xml.
La estructura de este archivo es la siguiente:
______________________________________________________________________________________________________________
Ciclo 02 – 2023 20
Programación IV
Managed Beans.
Es una clase Java que sigue la nomenclatura de los JavaBeans. No están obligados a extender de ninguna otra
clase, esto tiene la ventaja que JSF es menos intrusivo que el uso de Struts.
Un Backing Bean es lo mismo que un Managed Bean, debido a que es una clase Java del lado del servidor;
aunque JSF no define una clasificación para Backing Beans, podemos definir las siguientes:
Beans de Modelo: representan la capa Modelo en el patrón MVC.
Beans de Control: representan la capa Controlador en el patrón MVC.
Beans de Soporte o Helpers: contienen código por ejemplo de convertidores.
Beans de Utilerías: se pueden utilizar para tareas genéricas, como obtener el objeto HTTP request
______________________________________________________________________________________________________________
Ciclo 02 – 2023 21
Programación IV
@SessionScoped: el Bean está activo durante toda la sesión del usuario. En otras palabras, mientras la
sesión exista, existe el Bean.
Cuando renombramos un Bean, se puede hacer referencia a él con otro nombre desde las páginas JSF, la sintaxis
para renombrar es la siguiente:
@ManagedBean(name=”nombreBean”)
______________________________________________________________________________________________________________
Ciclo 02 – 2023 22
Programación IV
Por ejemplo:
@ManagedBean (name=”Ejemplito”)
@RequestScoped
public class EjemploBean{
. . .
}
1) La primera fase dentro de este ciclo de vida es el proceso de restauración o creación de la vista.
Si es la primera vez que solicita esta vista se va a crear cada uno de los componentes que representan las
etiquetas de nuestra página JSF y va a tener una clase correspondiente de Java que represente esa
etiqueta en JSF. Todas estas etiquetas son administradas por un componente principal llamado
“Component Tree” o árbol de componentes. En caso de que la petición haya sido “get” o sin parámetros,
el framework no tiene nada más que realizar y simplemente regresa la respuesta al cliente.
2) En caso contrario y que necesitemos procesar información, el paso dos es aplicar los valores de la
petición. En este paso los parámetros enviados son mapeados con cada uno de los componentes Java
correspondientes. Esto nos permitirá llenar la información que los usuarios están enviando a nuestra
aplicación Java.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 23
Programación IV
4) En caso de que no tengamos errores de validación, en el paso 4 lo que hace el framework es actualizar
los valores de nuestras clases de modelo, los valores de los componentes Java ya una vez validados y
convertidos en el paso 3 son puestos en los objetos de modelo utilizando los métodos “setters”
respectivos; es decir, que hasta este paso 4 es donde realmente el framework nos garantiza que esos
valores ya los podemos utilizar para operar. Por ejemplo si estamos enviando un dato de tipo fecha, en
este momento la fecha se puede convertir directamente a un tipo de fecha y no manejarlo como string ya
que normalmente así es como sucedía dentro del API de los servlets y los JSPs; cuando utilizábamos
esas tecnologías, nosotros éramos responsables de hacer este tipo de conversiones, en el caso de JSF
mucho de ese trabajo queda resuelto por el propio framework.
5) En el paso 5, ya que tenemos la información de modelo, procedemos a invocar nuestra aplicación, los
métodos que procesan las peticiones de nuestros usuarios. En este punto se ejecutan los métodos
“action” que están almacenados en los Managed Bean. Los métodos “action Listener” son llamados
antes que los métodos de tipo “action”.
6) Una vez que hemos procesado los métodos de nuestra aplicación se genera una respuesta respectiva
hacia el cliente. Con esto se concluye el ciclo de vida de nuestra aplicación JSF.
Internacionalización en JSF.
JSF tiene soporte total para la especificación “I18n” de Java, la especificación del idioma en una aplicación web.
Para definir un idioma debemos utilizar un archivo de propiedades. Estos archivos nos permiten especificar
nuestras etiquetas de las páginas web en varios idiomas:
Podemos observar en la figura que tenemos un archivo de mensajes con el idioma por default.
El idioma por default de la aplicación se puede especificar ya sea en el archivo faces-config o vía programática
en algún método “action” de un Managed Bean. Para ello debemos utilizar el objeto facesContext e
indirectamente vamos a utilizar el método “set-locate” y posteriormente utilizamos el método “set-locate”
indicando el código del lenguaje que vamos a utilizar.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 24
Programación IV
Entonces podemos observar que parte de la configuración del manejo de mensajes simplemente se define en
archivos de propiedades, cada uno de ellos contiene las etiquetas que se van a utilizar en nuestras páginas JSF
para desplegar las etiquetas en un idioma o en otro.
JSF puede cargar estas etiquetas de un archivo de propiedades también conocido como “Resource Bundle”.
En el archivo faces-config.xml debemos configurar el archivo a utilizar de la siguiente manera:
Por ejemplo, para utilizar el archivo de propiedades en las páginas JSF podemos hacerlo así:
<h:outputText value=”#{msg[‘form.usuario’]}” />
<h:commandButton value=”#{msg.enviar}” type=”submit” action=”login” />
Con esto lo que vamos a lograr es desplegar la etiqueta respectiva en el idioma que hayamos especificado. JSF
maneja la localización de errores y la información que ocurre en eventos como conversiones, validaciones y
otras acciones resultado del ciclo de vida de JSF dentro de este mismo concepto del manejo de mensajes.
JSF nos da la posibilidad de sobrescribir estos mensajes, sobre todo porque en ocasiones estos mensajes se
despliegan en el idioma nativo, es decir en inglés, y un requerimiento muy común es que los usuarios necesitan
ver esta información por ejemplo en español.
Por lo tanto para sobrescribir los mensajes internos con JSF, simplemente definimos un archivo de propiedades
(no importa el nombre), por ejemplo “jsf.properties”. Luego sobre escribimos los mensajes del sistema de JSF
que deseemos, por ejemplo:
javax.faces.component.UIInput.REQUIRED=Valor requerido
Así podemos definir cada una de las nuevas llaves a su valor respectivo en el idioma que estemos trabajando.
Finalmente para que JSF reconozca nuestro archivo con las modificaciones respectivas, lo que hacemos es
agregar en el archivo faces-config lo siguiente:
______________________________________________________________________________________________________________
Ciclo 02 – 2023 25
Programación IV
JSF provee varias maneras de detectar cambios (value change) en los componentes, ya sea agregando un atributo
de tipo “valueChangeListener” al componente o como un elemento interno.
Los Listener en JSF nos permiten responder a eventos que suceden en la vista para enlazar el evento al
controlador y procesar el cambio en el componente. Estos componentes deben implementar la interfaz “editable
value”.
Vamos a revisar a continuación el código de la vista:
En la vista, como podemos observar tenemos un atributo llamado valueChangeListener dentro de nuestro
componente inputText; a su vez ese atributo valueChangeListener tiene asociado un Bean y ese Bean va a
mandar a llamar indirectamente el método “codigoPostalListener”. Entonces, una vez que el usuario haga algún
cambio en este texto se manda llamar el método “onchange” y automáticamente se manda llamar el código Java
respectivo asociado con este Bean vacanteForm.
Esto permite que de manera muy simplificada podamos mandar a llamar eventos del lado del servidor de Java
directamente asociados con las páginas JSF.
Una vez que hemos configurado nuestro componente, debemos agregar el método “action” en el Managed Bean
respectivo que está escuchando el cambio en nuestra vista JSF. Este será el código que tenemos que agregar a
nuestro Managed Bean:
Podemos observar que es un método de tipo público void y se llama exactamente igual que como lo tenemos en
el atributo valueChangeListener, es decir, codigoPostalListener y recibe un atributo. El atributo es
“valueChangeEvent”, por lo tanto, cuando el usuario hace algún cambio dentro de nuestro inputText, ese
cambio manda llamar un evento directamente a nuestra clase Java, en este caso al método codigoPostalListener
y sí podemos observar en la figura siguiente:
Cuando un usuario está capturando algún valor dentro del campo de código postal, en automático se llama este
método que está mapeado en nuestro Managed Bean, y este método puede regresar información respectiva,
como puede ser en este caso a través del código postal se calcula directamente la ciudad y la colonia asociada a
este código postal.
En este tipo de componentes es común utilizar el atributo “immediate=true”, ya que la idea es evitar las
validaciones de los demás componentes y procesar sólo el componente que realizó el cambio de contenido.
ActionListener.
JSF provee dos maneras de configurar la detección de eventos cuando un usuario ejecuta una acción de tipo
“submit”, ya sea agregando un atributo de tipo “actionListener” al componente JSF o como un elemento interno
dentro de este componente.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 26
Programación IV
Algunos componentes que pueden manejar este tipo de eventos son: h:commandButton y h:commandLink, por
ejemplo:
<h:commandLink actionListener=”#{vacanteForm.enviar}”/>
Como podemos observar tenemos un atributo actionListener y ese atributo tiene asociado un Bean y finalmente
se manda llamar el método enviar de este Bean.
Este botón es muy similar al manejo de formularios HTML, cuando hacemos un submit o envío de nuestro
formulario.
Una vez definido el atributo o elemento interno, se debe agregar el método action en el Managed Bean que
procesa la petición de la Vista:
public void enviar(ActionEvent actionEvent) { … }
Este método debe tener la siguiente firma: debe ser public void y debe de tener un argumento de tipo
actionEvent, de tal manera que una vez que el usuario presiona este botón dentro de la página JSF se manda
llamar el evento respectivo. Este tipo de componentes nos permitirá procesar formularios en nuestras páginas del
cliente.
Componentes en JSF.
El API de JSF provee varios componentes básicos para el despliegue de información HTML. La lista de
componentes HTML en JSF es bastante extensa por lo que podemos revisar el API de JSF para tener el detalle
completo de cada uno de ellos:
El API de JSF provee varios componentes core para el manejo de eventos, administración de componentes, entre
otros. La lista de componentes core de JSF de igual manera es bastante extensa, por lo que podemos revisar en el
API de JSF a más detalle cada uno de estos elementos:
______________________________________________________________________________________________________________
Ciclo 02 – 2023 27
Programación IV
Como podemos observar este tipo de componentes no arrojan como tal un resultado HTML sino que tienen que
ver directamente con el framework de JSF, con el ciclo de vida o con validaciones y conversiones que se aplican
a nuestros componentes HTML.
a. La etiqueta misma de JSF: este es el código de nuestra página JSF y aquí es donde podemos configurar
eventos, etiquetas con la internacionalización, personalización de la apariencia del componente,
conversiones, validaciones, entre otras.
b. El despliegue del componente: este elemento representa el código que finalmente visualiza el cliente, en
caso de ser un cliente con un navegador web lo visualiza en HTML, el render kit por default de JSF de
hecho es un código en HTML.
c. El componente Java UI: esta es una clase de Java que representa el componente de la página JSF pero
desde el punto de vista de código Java; en la fase 1 del ciclo de vida de JSF restauración de la vista es
donde la etiqueta JSF se mapea con un componente Java de tipo UI y una vez que se mapea se agrega
este componente a la clase component Tree de la vista; por lo que podemos observar un componente de
JSF se compone de más elementos que simplemente una etiqueta HTML. Esto permite que un
componente creado en JSF sea reutilizable y además sea bastante robusto.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 28
Programación IV
El flujo podemos observar que comienza con nuestro cliente o navegador, únicamente recibe el código HTML
generado por su servidor Java. Una vez el cliente hace una nueva petición al servidor, el componen Tree se
sincroniza nuevamente. El código de las etiquetas JSF son convertidos o actualizados a su componente JSF de
tipo UI respectivo.
Por ejemplo: el componente h:inputText se convierte en un componente de tipo UI, el cual puede ser
manipulado directamente desde algún Managed Bean, entonces nuestra etiqueta finalmente genera elementos
Java y estos elementos ya se agregan a nuestro component Tree.
Una vez que se ha terminado con las fases del ciclo de vida de JSF, se envía nuevamente la respuesta al cliente
generando finalmente la respuesta HTML.
El component Tree tiene una duración de vida muy corta, normalmente durante el envío y la respuesta de la
petición, es decir, un alcance de tipo Request Response.
Los componentes JSF tales como h:selectOneMenu muestran una lista de datos, los elementos de esta lista se
conocen como “Select Items” (elementos de selección).
La lista de elementos de tipo “Select Item” ligada a una propiedad del Managed Bean es utilizada dentro de
nuestro componente JSF, por ejemplo:
<h:selectOneMenu>
<f:selectItems value=”#{coloniaHelper.coloniaSelectItems}” />
</h:selectOneMenu>
Podemos observar que nuestro componente de tipo “selectItems” está asociado con un componente Java en una
clase de tipo Managed Bean y el atributo a utilizar se llama “coloniaSelectItems”.
También podemos desplegar la lista de elementos JSF de la siguiente manera:
<h:selectOneMenu>
<f:selectItems>
<f:selectItems itemLabel=”Rojo” itemValue=”rojo” />
<f:selectItems itemLabel=”Verde” itemValue=”verde” />
<f:selectItems itemLabel=”Azul” itemValue=”azul” />
</f:selectItems>
</h:selectOneMenu>
En lugar de desplegar una lista completa, podemos ir agregando uno a uno los elementos o también extraídos
dinámicamente de atributos de nuestro Managed Bean.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 29
Programación IV
En JSF no es posible desplegar directamente una lista de elementos, como pueden ser un arreglo, una colección o
cualquier elemento que contenga varios datos. Esto se debe a que debemos de convertirlos precisamente a tipos
“selectItems” ya sea mostrándolos uno a uno o mostrándolos como una colección de objetos de tipo
“selectItems”.
Los Facelets no son JSP’s. Dentro de una página Facelet no es posible utilizar los siguientes taglib de JSP:
Por ejemplo, la sección de header, la sección de menú, la sección de contenido y la sección de pie de página.
De hecho, normalmente lo único que vamos a tener que cambiar en nuestra plantilla va a ser la sección de
contenido.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 30
Programación IV
Los elementos generales para utilizar las plantillas de Facelets son los siguientes:
Template (plantilla): esta página será utilizada para controlar el layout (la disposición de los elementos)
en nuestra página JSF.
Template-client: una vez que hemos definido la plantilla, debemos crear un cliente de esta plantilla, es
decir, una página que personalice su propia distribución (layout) a partir de la plantilla que implementa.
Los usuarios finales siempre accederán al Template-client, nunca accederán directamente a la plantilla
base.
Componentes compuestos.
La creación de nuevos componentes JSF requería de crear clases Java. Los Facelets permiten crear componentes
reutilizables combinando HTML, CSS, Javascript y también los tags de JSF. Esto permite la reutilización de
otros componentes es decir por ejemplo si ya creamos un componente. Otra ventaja es que con los Facelets
podemos definir un nuevo componente en un archivo XHTML, no hay necesidad de crear clases Java.
Los componentes compuestos son básicamente templates asociados a un tag library personalizado.
Para referenciar a un nuevo componente basta con importar el namespace en el XHTML. El namespace de
alguna manera es como si hiciéramos un import de una clase de Java, pero en este caso lo que vamos a hacer es
un import de nuestro componente de nuestra página JSF.
______________________________________________________________________________________________________________
Ciclo 02 – 2023 31