Java-Repaso JSF
Java-Repaso JSF
2. Managed Beans................................................................................................... 6
4. Validadores.........................................................................................................21
5. Convertidores..................................................................................................... 27
6. Mensajes e Internacionalización.........................................................................30
7. Manejo de eventos.............................................................................................36
8. ActionListener.....................................................................................................40
9. Manejo de componentes....................................................................................42
1
Introducción – JavaServer Faces
JavaServer Faces (JSF) es una tecnología y framework para aplicaciones Java
basadas en web que simplifica el desarrollo de interfaces de usuario en aplicaciones
Java EE.
JavaServer Faces es un framework de desarrollo web para Java que se utiliza para
construir aplicaciones web basadas en componentes. JSF simplifica la creación de
interfaces de usuario web al proporcionar una capa de abstracción sobre las
tecnologías web subyacentes, como HTML, CSS y JavaScript.
2. Managed Beans: Los managed beans son clases de Java que actúan como
controladores o manejadores en un proyecto JSF. Estas clases encapsulan la
lógica de negocio y la interacción con los componentes JSF. Los managed
beans se anotan con anotaciones especiales de JSF, como @ManagedBean,
para indicar que son administrados por el framework.
2
4. Expresiones de JSF: JSF utiliza un lenguaje de expresión para vincular los
componentes de la interfaz de usuario con los datos y la lógica del backend.
Estas expresiones se utilizan para establecer y obtener valores de los
componentes, y permiten la comunicación bidireccional entre la interfaz de
usuario y el backend.
3
Tiene desarrollado componentes reutilizables listos para utilizarse.
Render-Kits: Los componentes pueden desplegarse no solamente en
navegador Web, sino en dispositivos móviles u otros tipos de clientes.
Manejo de anotaciones para varias configuraciones.
Soporte nativo para AJAX.
4
ConfigurationJSF.java:
5
Index.html
OutPut:
2. Managed Beans
Un Managed Bean es una clase Java que sigue la nomenclatura de los
JavaBeans
o Los Managed Beans no están obligados a extender de ninguna otra
clase.
Aunque JSF no define una clasificación para los Backing Beans, podemos
definir las siguientes (Baking Bean es lo mismo que Managed Bean):
o Beans de Modelo: Representan el Modelo en el patrón MVC.
o Beans de Control: Representan el controlador en el patrón MVC.
o Beans de Soporte o Helpers: Contienen código por ejemplo de
convertidores.
o Beans de Utilerías: Tareas genéricas, como obtener el objeto request.
6
o @ManagedBean
Como bean CDI (Context and Dependency Inyection), antes del nombre de la
clase:
o @Named
o Agregar un archivo llamado beans.xml en la carpeta: web/WEB-INF
(Esto es opcional en la versión 8 de Java EE).
En el archivo faces-config.xml:
o <managed-bean> … </managed-bean>
Hay un alcance llamado custom, es una estructura de datos Map que enlaza objetos
(Valores) con llaves (Keys). El tiempo de vida del Map es administrado por el
implementador, por eso es de tipo Custom, o personalizado.
7
Nota: Para algunos Alcances es obligatorio que el vean implemente la interfaz
“Serializable”.
8
Candidato.java
Index.xhtml
9
OutPut:
Navegación Estática
Navegación Dinámica
10
La navegación dinámica utiliza un método action, el cual tiene la lógica para
determinar el outcome:
If (…) {
return “exito”;
} else {
return “fallo”;
<faces-config …>
<navigation-rule>
<from-view-id>/inicio.xhtml</from-view-id>
<navigation-case>
<from-outcome>entrar</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
11
2.3 Ejercicio Backing Bean
El concepto de Backing Bean es más que todo una clasificación de los Managed
Beans en JSF:
Estructura:
12
index.xhtml
exito.xhtml
13
fallo.xhtml
Candidato.java
14
VacanteForm.java
Prueba:
Prueba 1:
Input:
15
Output:
Prueba 2:
InPut:
OutPut:
16
3. Ciclo de vida de JSF
Librerias:
17
Estructura:
log4j2.xml
faces-config.xml
18
DebuggerListener.java
VacanteForm.java
19
Candidato.java
Prueba:
20
4. Validadores
Los validadores se encuentran en la fase 3 del ciclo de vida de JSF, también los
convertidores se encuentran dentro de esta fase.
Las validaciones aseguran que los datos de nuestra aplicación sean consistentes,
según sean introducidos por el usuario. Algunas cuestiones que podemos validar
son:
Validaciones estándar
Validaciones en los métodos de los Managed Beans
Validaciones personalizadas o customizadas
21
Gracias a que este proceso se ubica en la fase 3, nos aseguramos de que antes de
actualizar la información del modelo, tengamos la certeza de que la información se
encuentra con el formato y el tipo de dato deseado.
</h:inputText>
El ejemplo anterior nos muestra un inputText con una validación de rango, en donde
el rango mínimo de edad debe de estar entre 18 y 50 años.
<f:validator validatorId=”validatorIp”/>
</h:inputText>
22
4.1 Ejercicio de validadores
Cambios realizados en el proyecto:
Candidato.java
23
Index.xhtml
VacanteForm.java
24
Prueba:
Prueba 1:
InPut:
OutPut:
25
Prueba 2:
InPut:
OutPut:
Prueba 3:
InPut:
OutPut:
26
5. Convertidores
Los convertidores cubren la necesidad de asignar valores entre la vista y el modelo
de manera automática:
Tipos de conversiones:
Conversiones implícitas:
o Son conversiones que JSF realiza de manera automática, por ejemplo,
al usar tipos primitivos, BigInteger, o String:
Conversiones explicitas:
<h:inputText value=”#{empleadoBean.edad}”>
27
</h:inputText>
Convertidores personalizados
Los pasos para crear y utilizar una clase converter son los siguientes:
o En la página JSF:
Index.xhtml
Candidato.java
28
exito.xhtml
29
6. Mensajes e Internacionalización
JSF tiene soporte total para la especificación I18n de Java, para la
especificación del idioma en la aplicación.
<application>
<resource-bundle>
<base-name>mensajes</base-name>
<var>msg</var>
</resource-bundle>
</application>
30
Podemos utilizar el archivo de propiedades en la página JSF como sigue:
Manejo de mensajes
JSF nos permite sobrescribir estos mensajes, sobre todo porque en ocasiones estos
mensajes se despliegan en el idioma nativo, es decir en inglés.
jsf.properties
javax.faces.component.UIInput.REQUIRED=Valor Requerido
Finalmengte para que reconozca JSF nuestro archivo con las modificaciones
respectivas, lo que hacemos es configurar el archivo faces-config.xml:
<application>
<message-bundle>jsf</message-bundle>
</application>
31
6.1 Ejercicio de manejo de mensajes
Estructura de proyecto
mensajes.properties
jsf.properties
32
faces-config.xml
index.xhtml
33
Prueba:
mensajes_en.properties
34
jsp_en.properties
faces-config.xml
35
Prueba:
7. Manejo de eventos
Value Change Listener en JSF
JSF provee dos maneras de detectar cambios (value change) en los componentes,
ya sea agregando un atributo 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 EditableValueHolder.
36
Una vez definido el atributo o elemento interno, se debe agregar el método action en
el Managed Bean que escucha el cambio en la vista:
Candidato.java
Se crearon los siguientes atributos con sus respectivos métodos getters y setterts:
VacanteForm.java
37
index.xhtml
Prueba 1:
InPut:
OutPut:
38
Sa salida sin sio sin haber seleccionado el botón “Submit”
Prueba 2:
InPut:
OutPut:
Sin haber seleccionado el botón “Enviar”, el sistema relleno los siguientes campos
automáticamente:
39
8. 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 el atributo actionListener al
componente JSF o como un elemento interno en el componente.
<h:commandLink actionListener=”#{vacanteForm.enviar}”/>
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:
Candidato.java
index.xhtml
40
VacanteForm.java
41
9. Manejo de componentes
Componentes HTML:
Componentes Core:
Arquitectura de Componentes:
Los componentes en JSF son más que simples etiquetas HTML, estos componentes
tienen mucha similitud con componentes de tipo Swing para aplicaciones de
escritorio en Java. Existen 3 partes esenciales en un componente JSF:
42
El primer componente en la etiqueta misma de JSF, este el código de nuestra
página JSF y aquí en donde podemos configurar eventos, internacionalización,
apariencia del componente, conversiones, validaciones, entre otras. Posteriormente
tenemos 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.
Finalmente tenemos como parte de la arquitectura 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 ComponentTree de
la vista.
Component Tree
43
Una vez que se han 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
envió y la respuesta de la petición, es decir un alcance de tipo “request”.
Componentes de Selección:
44
Select Items
45
Se crea el atributo “coloniaId” y sus métodos set y get:
index.xhtml
Quitamos el inputText:
46
Agregamos el nuevo componente:
VacanteForm.java
47
Prueba:
InPut:
OutPut:
Prueba 2:
48
9.2 Ejercicio de componente SelectItems
Colonia.java
Se crea una nueva clase Colonia para separar la información y tengamos una clase
de modelo para manejar exclusivamente los valores de las colonias:
49
ColoniaHelper.java
Se crea una clase llamada ColoniaHelper, esta clase va a ser un intermediario para
conectarse a una base de datos o alguna fuente donde venga la información de
cada una de las colonias y nuestro ManagedBean, todo esto con el objetivo de
separar la funcionalidad y no tener todo en una misma clase:
50
51
index.xhtml
VacanteForm.java
52
Prueba 1:
InPut:
OutPut:
53
Prueba 2:
InPut:
OutPut:
Características:
54
Los Facelets es la tecnología estándar de despliegue de JSF, antes se
utilizaban los JSP’s.
Los Facelets eliminan completamente la necesidad de los JSP’s
Utilizan un parse XML en lugar del compilador de JSP.
Comparado con JSP, los Facelets crean un componente tree más ligero.
Los Facelets resultan hasta un 30% más rápidos en compilación.
Soporte para Templates
Creación de componentes compuestos es mucho más simple.
Permiten en manejo dinámico del component Tree, tanto para agregar, como
para eliminar componentes.
Dentro de una página Facelet NO es posible utilizar los siguientes taglib de JSP:
<jsp:root/>
<jsp:directive.include…/>
<jsp:output…/>
<jsp:directive.content…/>
<c:forEach… />
<c:if… />
<c:catch… />
Cabecero
Menú Contenido
Pie de página
55
Template (Plantilla): Página utilizada para controlar el layout (disposición de
los elementos)
Template-cliente (Cliente de la Plantilla): Página que personaliza su propia
distribución (layout) a partir de la plantilla que implementa.
Componentes compuestos
56
estilos.css
plantilla.xhtml
index.xhtml
57
Prueba:
OutPut:
58
11. Rol de JSF en Java EE y Ajax en JSF
59