09 JSF
09 JSF
APLICACIONES
DISTRIBUIDAS
Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes
INTRODUCCION
Java Server Faces (JSF)
h"ps://javaee.github.io/glassfish/
• Facelets, es un lenguaje de declaración de páginas, usado para construir vistas de Java Server Faces. U:liza plan:llas de es:lo de HTML y
construye árboles de componentes
• Caracterís:cas
• Uso de XHTML para crear páginas web (hIps://www.tutorialspoint.com/es/xhtml/xhtml_doctypes.htm)
• Soporte para librerías de e:quetas Facelets que se suman a las librerías de JavaServer Faces y JSTL
• Soporte para el Lenguaje de Expresiones (EL por su siglas en ingles)
• Plan:llas para componentes y páginas
• Se apoya principalmente en tres librerías
• JSF Core Tags: xmlns:f="hIp://xmlns.jcp.org/jsf/core"
• JSF HTML Tags: xmlns:h="hIp://xmlns.jcp.org/jsf/html"
• Facelets Tags: xmlns:ui="hIp://xmlns.jcp.org/jsf/facelets"
• HTML tags
• <h:outputStylesheet library="css" name="my.css" />
• <h:outputScript library="javascript" name="my.js" />
• <h:graphicImage library="images" name="my.png" />
• Más información, hIps://myfaces.apache.org/core11/myfaces-impl/tlddoc/h/tld-summary.html
Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes
Contextos y la inyección de dependencias (CDI)
• La inyección de contextos y dependencias (CDI) permite que sus objetos reciban sus dependencias automá<camente, en lugar de crearlos o recibirlos
como parámetros. CDI también ges<ona el ciclo de vida de esas dependencias por usted.
• CDI es un conjunto de servicios que, usados en conjunto, facilitan a los desarrolladores el uso de beans empresariales (EJB) junto con la tecnología
JavaServer Faces (JSF) en aplicaciones web. Diseñado para su uso con objetos stateful, CDI también <ene muchos usos más amplios, lo que permite a
los desarrolladores una gran flexibilidad para integrar varios <pos de componentes de una manera débilmente acoplado pero segura.
• Los servicios más fundamentales proporcionados por CDI son los siguientes.
• Contextos: este servicio le permite vincular el ciclo de vida y las interacciones de componentes con estado a contextos de ciclo de vida bien
definidos pero extensibles.
• Inyección de dependencia: este servicio le permite inyectar componentes en una aplicación de forma segura y elegir en el momento del
despliegue qué implementación de una interfaz par<cular inyectar.
• Además, CDI brinda los siguientes servicios:
• Integración con el Expression Language (EL), que permite que cualquier componente se use directamente dentro de una página JavaServer
Faces o una página JavaServer Pages
• La capacidad de decorar componentes inyectados
• Un alcance de conversación web además de los tres ámbitos estándar (solicitud, sesión y aplicación) definidos por la especificación de Java
Servlet
• CDI redefine el concepto de un bean más allá de su uso en otras tecnologías Java, como las tecnologías JavaBeans y Enterprise JavaBeans (EJB). En CDI,
un bean es una fuente de objetos contextuales que definen el estado o la lógica de la aplicación. Un componente Java EE es un bean si el contenedor
puede ges<onar el ciclo de vida de sus instancias de acuerdo con el modelo de contexto del ciclo de vida definido en la especificación CDI.
• Un bean ges<onado es implementado por una clase Java, denominado como clase bean. Una clase de Java es considerada como un bean ges<onado
si está definida para ser administrada por cualquier otra especificación de tecnología Java EE, como por ejemplo: la especificación de tecnología
JavaServer Faces. También, se considera un bean ges<onado si cumple con las siguientes condiciones.
• No es una clase interna o está<ca.
• Es una clase concreta o anotada @Decorator.
• No usa anotaciones que define el componente EJB ni se declara como una clase bean de EJB en ejb-jar.xml.
• Tiene un constructor apropiado. Es decir, uno de los siguientes:
• La clase <ene un constructor sin parámetros.
• La clase declara un constructor anotado @Inject.
• Puede tener otros constructores
• No se requiere una declaración especial, como una anotación, para definir un bean ges<onado.
• Atributos privados con geXers & seXters asociados al formulario
• Métodos para las acciones del controlador, puede tener varios métodos.
• El concepto de inyección ha sido parte de la tecnología Java durante algún :empo. Desde que se introdujo la plataforma Java EE 5, las
anotaciones han permi:do inyectar recursos y algunos otros :pos de objetos en objetos ges:onados por contenedores. CDI hace posible
inyectar más :pos de objetos e inyectarlos en objetos que no están ges:onado por contenedor.
• Se pueden inyectar los siguientes :pos de objetos:
• Casi cualquier clase de Java
• Session beans
• Recursos de Java EE: fuentes de datos, tópicos de Java Message Service, colas, fábricas de conexiones y similares
• Contextos de persistencia (objetos En#tyManager de la API de persistencia JPA)
• Campos productores
• Objetos devueltos por métodos de productor
• Referencias de servicios web
• Referencias de beans remotos empresariales
• Para que una aplicación web use un bean que inyecta otra clase de bean, el bean debe ser capaz de mantener el estado durante la interacción del
usuario con la aplicación. La forma de definir este estado es darle un alcance al bean. Puede asignar a un objeto cualquiera de los ámbitos más
utilizados descritos en la la siguiente tabla:
• Para hacer que un bean sea accesible a través del EL (Lenguaje de expresión), use la anotación @Named
• El calificador @Named le permite acceder al bean utilizando el nombre del bean, con la primera letra en minúscula.
• Puede especificar un argumento para el calificador @Named para usar un nombre no predeterminado:
• @Named (”HolaDesdeJSF")
• Con esta anotación, la página Facelets se referiría al bean como HolaDesdeJSF.
• Atributo render
• Se indica al servidor los elementos que se deben actualizar dentro de la página
• Ej. <j:ajax render=“id1 id2”/>. Se deben definir el atributo “id” de los elemento afectados
• Atributo execute
• Se indica que elemento se deben enviar al servidor para actualizar
• @this. Sólo el actual, por defecto
• “id1 id2”. Los mencionados explícitamente
• @form. Todos los incluidos en el formulario
• @none. Nada
• @all. Todos los de la página
• Atributo event
• Se indica los eventos afectados para la pe:ción al servidor: Eventos DOM ,
• valueChange de JSF
• Por defecto, el evento del componente
• Atributo onevent
• Se llama a una función javascript en las diferentes fases de la pe:ción
• "begin", "complete" y "success“, en este orden
Aplicaciones Distribuidas - Dr. Gabriel A. León Paredes
Ajax
<h:dataTable
value="Colección"
var=“item”. Varible u:lizada en cada fila
border="1"
styleClass="es:lo-tabla"
headerClass="es:lo-cabecera"
rowClasses="filaPar,filaImpar">
footerClass, cap:onClass, columnClasses
<h:column>
<f:facet name=“header”>Título col. 1</f:face>
header, footer, cap:on
#{item.propiedad}
<h:outputText value="#{item.propiedad}" rendered="#{not item.editable}" />
</h:column>
<h:column>...</h:column>
</h:dataTable>