java server faces. jsf framework java que permite construir páginas como interfaces de usuario...

88
Java Server Faces

Upload: desi-pedregon

Post on 22-Jan-2016

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Java Server Faces

Page 2: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

JSF

• Framework Java que permite construir páginas como interfaces de usuario– Distintos tipos de componentes.– Estados y eventos/funcionalidad (JavaScript).– Asociación entre datos de la interfaz y datos

de la aplicación web (Java Beans, etc).– Especificación de la navegación del usuario.– Colección de etiquetas Facelets/JSP

asociadas.

Page 3: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Facelets y JSP

• Facelets y JSP son dos tecnologías diferentes. JSF permite la utilización de ambas, incluso conjuntamente

• Facelets es más reciente, es específica para JSF y ofrece más posibilidades al desarrollador

• La especificación actual de JSF, 2.0, recomienda la utilización de Facelets

Page 4: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Hello World (con Facelets)

• Componente de presentación: Hello.xhtml– Atributos de la etiqueta html para la inclusión

de librerías en lugar de directivas de página– Etiquetas especiales h:head y h:body

• Cláusulas especiales en web.xml:– context-param (desarrollo, producción, …)– servlet (FacesServlet, load-on-startup)– Servlet-mapping (por defecto, /faces/*)– welcome-file (faces/Hello.xhtml)

Page 5: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejemplo de Hello.xhtml<?xml version='1.0' encoding='UTF-8' ?>

<!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:f=http://java.sun.com/jsf/core

xmlns:h=http://java.sun.com/jsf/html

xmlns:ui=http://java.sun.com/jsf/facelets>

<h:head> <title>Facelet Title</title> </h:head>

<h:body>

<h1> Hello from Facelets </h1>

</h:body> </html>

Page 6: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejemplo de web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0"

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-app_3_0.xsd">

<context-param>

<param-name>javax.faces.PROJECT_STAGE</param-name>

<param-value>Development</param-value>

</context-param>

Page 7: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejemplo de web.xml, II <servlet>

<servlet-name>Faces Servlet</servlet-name>

<servlet-class>javax.faces.webapp.FacesServlet</s-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>Faces Servlet</servlet-name>

<url-pattern>/faces/*</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>faces/Hello.xhtml</welcome-file>

</welcome-file-list> </web-app>

Page 8: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Etiquetas y componentes

• Hay tres tipos de etiquetas JSF, incluidos en tres bibliotecas:– Etiquetas de carácter transversal (biblioteca

core), comunes a JSP y Facelets.– Etiquetas de componentes gráficas (biblioteca

HTML), comunes a JSP y Facelets.– Etiquetas específicas de Facelets (biblioteca

facelets)

• Además, las aplicaciones JSF pueden utilizar otras etiquetas de la biblioteca estándar de JSP (c:if, c:foEach, etc.)

Page 9: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Facelets vs JSP

• Facelets permite definir plantillas de páginas web que contienen partes pendientes de concretar

• También permite definir componentes de documentos, que se pueden incluir en las partes incompletas de las plantillas

• Las componentes pueden depender de parámetros (colores, tamaño, etc.) que se determinan al incluirlas en plantillas

Page 10: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

JSF: Algunas características

• Especificación en las etiquetas de caminos (paths) relativos y absolutos para el servidor de acceso a recursos (imágenes, etc). Traducción automática al cliente.

• Asociación directa en las etiquetas a datos de la aplicación (Java Beans, etc):– Datos necesarios para la visualización de la página.– Datos proporcionados por el usuario (formularios).– Otros datos que permiten parametrizar el código del

servidor que genera la interfaz.

Page 11: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

JSF: Algunas características, II

• JSF utiliza la arquitectura MVC de forma sistemática

• El servlet controlador, FacesServlet, es fijo y lo proporciona JSF

• La especificación concreta de la navegación por la aplicación en cada caso se realiza mediante un fichero de configuración XML que da lugar a una estructura de datos (un autómata)

Page 12: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

JSF: Algunas características, III• El modelo está formado por los Beans que

guardan los datos generados por la aplicación.

• Cada solicitud incorpora datos nuevos, que pueden ser parámetros de control o informa-ción a incorporar al modelo del servidor

• Utiliza exclusivamente peticiones POST, que van siempre al servlet principal. No permiten motores de búsqueda ni guardar URLs favoritas.

Page 13: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Hello dinámico

Aplicación que:

• Pide al usuario su nombre.

• Tras pulsar un botón, se saluda al usuario por su nombre.

• Permite la vuelta a la página inicial pulsando en otro botón.

• Sin necesidad de volver a identificarse, vuelve a la segunda página pulsando el botón y le vuelve a saludar correctamente.

Page 14: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Hello dinámico, II

• Páginas web: Identificación y saludo• Página de identificación:

– Etiqueta estática que pide la identificación– Formulario con dos componentes:

Campo de texto para introducir la identificación

Botón para pasar a la segunda página

• Página de información:– Texto dinámico de saludo– Formulario con botón para volver a la página inicial

Page 15: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Hello dinámico: identifica.xhtml

<h:body>

<h:form>

<h:outputLabel for=“nombre”

value="Introduzca su nombre:"/>

<h:inputText value=“#{nombre}” id=“nombre”>

<h:commandButton value=“OK” action=“hello”/>

</h:form>

</h:body>

Page 16: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Hello dinámico: hello.xhtml

<h:body>

<h1> Hello ${nombre} </h1>

<h:commandButton value="OK"

action="index"/>

</h:body>

Recomendación: Implementarlo y ver los códigos de las páginas generadas

Page 17: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ciclo de vida deaplicaciones JSF: Ejecución

• Las componentes web dan lugar a un objeto Java que las modeliza (se puede ver como una estructura análoga al DOM, que tiene un nodo por cada etiqueta de Facelets)

• Las componentes se reutilizan total o parcialmente de una vez para otra

Page 18: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ciclo de vida deaplicaciones JSF: Ejecución, II

• Tras (re)construir la vista de la aplicación, se aplican los valores de los parámetros de la solicitud.

• A continuación se realizan conversiones y validaciones de valores.

• Tras ello se actualizan los beans asociados de acuerdo con la información contenida en las componentes

• Por último se ejecutan los métodos apropiados.

Page 19: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ciclo de vida deaplicaciones JSF: Tratamiento

• Una vez ejecutada la vista, se realiza su tratamiento (render) para generar el código HTML correspondiente.

• El tratamiento lo efectúa un objeto, denominado renderer, cuya funcionalidad puede adaptarse para distintas aplicaciones. Java EE proporciona un renderer por defecto que es apropiado para la mayoría de las aplicaciones web

Page 20: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ciclo de vidade aplicaciones JSF

123

6HTML

1 (Re)construir árbol

2Pasarparámetros

3 Validación

4Incorporarinformación

5Eventos

Aplicación

Page 21: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad
Page 22: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ciclo de vidade aplicaciones JSF, II

• Durante cada fase en el ciclo de vida se producen eventos, ante los cuales la aplicación puede reaccionar mediante listeners

Page 23: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Beans gestionados en aplicaciones JSF

• Según hemos visto en el apartado de CDI, en las aplicaciones web (por lo tanto, en particular, en las aplicaciones JSF) se pueden asociar beans a contextos

• El contexto de los beans utilizados en JSF se especifica mediante las anotaciones que hemos visto en el apartado de CDI.

Page 24: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Beans gestionados en aplicaciones JSF, II

• Para que los beans gestionados de una aplicación JSF se adapten al ciclo de vida de la página han de tener además de las anotaciones previstas por CDI la anotación @ManagedBean.

• La configuración de los beans gestionados en JSF se puede hacer en el ficherode configuración faces-config.xml, que es obligatorio pero puede estar vacío.

Page 25: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Especificación de la navegación entre páginas JSF

• La página de destino tras pulsar un botón en una página JSF puede no ser fija.

• Además de la posibilidad de utilizar un método que la calcule, también se puede utilizar un autómata (máquina de estados).

• El autómata se puede definir mediante reglas de navegación incluidas en el fichero de configuración faces-config.xml.

Page 26: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Uso de expresiones UEL

• Los atributos de las componentes y otros objetos generados por JFS se evalúan en el momento que les corresponde del ciclo de vida.

• Por ejemplo, los valores que se obtienen de la aplicación, como los contenidos de las etiquetas, se evalúan en la fase de incorporación de datos de la aplicación, tras procesar los parámetros de la solicitud.

Page 27: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Uso de expresiones UEL, II

• Para controlar la evaluación de los atributos, sus valores son normalmente expresiones UEL de evaluación retardada, #{…}.

• Normalmente son expresiones que corresponden a l-values, es decir que su valor es una referen-cia asignable. Por ejemplo, no pueden ser el resultado de una operación o una comparación ni números, pero pueden ser atributos de objetos. También pueden ser colecciones o enumeraciones.

Page 28: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejercicio opcional

• [JSF1] Aplicación JSF que muestra una lista de nombres de personas extraída de una base de datos que contiene información adicional sobre ellas y permite seleccionar personas de la lista y, tras pulsar en un botón, muestra en otra página la información de todas las personas seleccionadas.

Page 29: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Diferencias en la ejecución entre SJP y Facelets

• El código JSP da lugar a un servlet que se compila la primera vez que se accede a la página y (re)construye la vista cada vez

• El código Facelets se compila y el servlet FacesContext lo llama cuando tiene que (re)construir la página

Page 30: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas: Texto fijo

• <h:outputText

value=“${price}”

lang=“en_US”

/>

Page 31: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas:Campo de texto

• <h:inputText

required=“true”

maxLength=“30”

value=#{book.price}>

</h:inputText>

Page 32: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas: Imagen

• <h:graphicImage

height=“20”

length=“100”

value=“/images/book.gif”

/>

Page 33: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas:Menús de selección

• <h:selectOneMenu

id="selectOneCar“

value="#{carBean.currentCar}"> <f:selectItems

value="#{carBean.carList}" />

</h:selectOneMenu>

(También: h:selectManyMenu)

Page 34: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas:Recuadros de selección múltiple

• <h:selectManyCheckbox

id="cars“

value="#{carsBean.car}">

<f:selectItems

value="#{carBean.carList}"/>

</h:selectManyCheckbox>

Page 35: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas:Recuadros seleccionables

• <h:selectBooleanCheckbox

title="emailUpdates“

value="#{jsfex.wantsUpdates}" >

</h:selectBooleanCheckbox> <h:outputText

value="Would you like email

updates?"/>

Page 36: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Otras componentes de selección

• h:selectManyListbox

• h:selectOneListbox

• h:selectOneRadio

Page 37: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas: Paneles

Tabla con números

1 2

3

Pie de tabla

Page 38: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas: Paneles, II

• <h:panelGrid columns=“2“<f:facet name="header">

<h:outputText value="Tabla con números"/></f:facet><h:outputText value="1" /><h:outputText value="2" /><h:outputText value="3" /><f:facet name="footer">

<h:outputText value=“Pie de tabla" /></f:facet>

</h:panelGrid>

Page 39: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas: Tablas

• <h:dataTable id="books“ value="#{BookStore.items}“var=“book">

<h:column><f:facet name="header">

<h:outputText value="#{msg.storeNameLabel}"/></f:facet><h:outputText value="#{book.name}"/> </h:column>

<h:column> <f:facet name="header"><h:outputText value=“#{msg.storeTypeLabel}”/>

</f:facet> <h:outputText value="#{book.subject}"/></h:column> </h:dataTable>

Page 40: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas:Botón y enlace con acción

• <h:commandButtonaction=“pg2”value=“OK”

/>• <h:commandLink

action=“${pg2}”value=“UAM”

/>

Page 41: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas:Botón y enlace con acción, II

• Se pueden utilizar varios botones y enlaces en un mismo formulario (JSF genera el código necesario para su funcionamiento, utilizando campos ocultos en el formulario).

• El atributo action, además de una cadena de caracteres, puede ser un método público de cualquier objeto sin argumentos, que devuelva una cadena.

Page 42: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas:Mensajes de errores del usuario• Incluye todos los mensajes de error para el

usuario:<h:messages style=“color: red” />

• Incluye mensajes de error de una componente:<h:message

style="color: red“for="useraddress" />

<h:inputText id="useraddress“value="#{jsfexample.address}“required="true"/>

Page 43: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Depuración

• JSF (con facelets) no crea un servlet por cada página

• Las páginas no se pueden depurar línea a línea (cada línea de código se transforma en instrucciones distribuidas en varios lugares del código Java)

• Los errores producidos en el contenedor se pueden utilizar para depurar igual que en las demás aplicaciones web

Page 44: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Depuración, II

• El fichero web.xml incluye información acerca de la forma de ejecución. En la forma de desarrollo la aplicación muestra en el navegador información detallada acerca de los errores de compilación

• Se puede obtener información acerca del árbol de componentes web introduciendo en una componente la etiqueta ui:debug.

• La información se muestra con Ctrl-Shft-D

Page 45: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Depuración, III

• Hay herramientas que permiten seguir el ciclo de vida de la aplicación– jsftutorials.net/faces-config/phaseTracker.html

• Phase Tracker muestra la información correspondiente a cada cambio de fase en el ciclo de vida

• Phase Tracker utiliza un listener de eventos de la evolución del ciclo de vida

Page 46: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Funcionalidad de etiquetas transversales

• Acciones para la manipulación de eventos

• Conversión de datos

• Validación de datos

• Internacionalización

Page 47: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Modelo de conversión de datos

• La estructura de datos utilizada en la presentación no es la misma que se utiliza en la representación de datos por el servidor.– Ejemplo: Una fecha se puede mostrar

mediante tres cadenas de caracteres.

• JSF proporciona conversores estándar.

• Se pueden definir más conversores.

Page 48: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejemplos de conversores de datos

• <h:outputTextvalue=“${price}”lang=“en_US”converter=<f:convertNumber

type=“currency”maxFractionDigits=“2”

/> />• <h:outputText value="#{article.date}">

<f:convertDateTime dateStyle="full"/></h:outputText>

Page 49: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Modelo de validación

• JSF permite definir restricciones sobre los valores de determinados datos introducidos por los usuarios.

• JSF proporciona validadores estándar.

• Se pueden definir más validadores.

Page 50: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejemplos de validadores

• <h:inputTextrequired=“true”maxLength=“3”value=#{article.price}>

<f:validateLongRangeminimum=“#{article.minPrice}”maximum=“#{article.maxPrice}”

/></h:inputText>

Page 51: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Modelo de eventos

• Las acciones del usuario generan eventos, que son objetos de una clase JSF.

• Los eventos de acción, como los botones y los enlaces, dan lugar a una petición al servidor y pueden activar acciones en él.

• Los eventos de cambio de valor, como la selección de items en una lista y la activación de un check box, además de poder generar la evaluación de métodos JS en el cliente, pueden activar acciones específicas en el servidor, como el acceso a una base de datos.

Page 52: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Modelo de eventos: Ejemplo

• <h:commandButton

action=“#{bean.method}”

value=“OK”/>

• class Bean { …

String method() { … } }

• Los objetos registrados para recibir eventos reciben el valor que devuelve method()

Page 53: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Recordatorio: Ciclo de vida

123 abc

6HTML

1 Crear

2Pasar

3 Validar yeventos c.v.

4Incorporar

5Eventos

Aplicación

Page 54: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Modelo de eventos: Priorización

• Las acciones desencadenadas en el servidor por los eventos de acción se ejecutan inmediatamente antes de generar la respuesta.

• Las acciones desencadenadas en el servidor por los eventos de cambio de valor se ejecutan en la fase de validación.

Page 55: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Modelo de eventos: Priorización, II

• A veces se desea que las acciones asociadas a eventos de acción modifiquen datos necesarios en fases previas, como la incorporación de datos de la aplicación (por ejemplo, si un dato generado por el usuario se utiliza en la presentación inmediata).

• A veces se desea priorizar la ejecución de las acciones asociadas a eventos de cambio de valor (por ejemplo, si modifican datos necesarios en otra acción del mismo tipo).

Page 56: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Modelo de eventos: Priorización, III

• Si una componente gráfica tiene su atributo immediate con valor true, las acciones desencadenadas en el servidor por los eventos de acción y cambio de valor se ejecutan al final de la fase de aplicación de parámetros de la petición, resolviendo los problemas anteriores.

Page 57: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Modelo de navegación

• JSF permite especificar la navegación entre páginas mediante reglas que indican qué eventos permiten pasar de una página a otra.

• El evento null dirige de nuevo a la última página.

• La especificación de la navegación en aplicaciones basadas en JSF se hace mediante el fichero de configuración faces-config.xml en lugar de utilizar un servlet.

Page 58: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Modelo de navegación:Formato de las reglas

<navigation-rule>

<from-view-id>/init.jsp</from-view-id>

<navigation-case>

<from-outcome>event</from-outcome>

<to-view-id>/end.jsp</to-view-id>

</navigation-case>

</navigation-rule>

Page 59: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Inclusión de mensajes(parte del texto de la página)

• Fichero

src/articles/ArticleMsgs.properties:

ServerError=Request not completed

ClientError=Form not filled

Page 60: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Inclusión de mensajes:Carga selectiva

• Fichero Articles.jsp:

<f:loadBundle

basename=“articles.ArticleMsgs“

var=“artmsg“/>

<h:outputText

value=“#{artmsg.ServerError}”/>

Page 61: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Inclusión de mensajes:Carga global

• Fichero faces-config.xml:• <resource-bundle>

<base-name> articles.ArticleMsgs

</base-name><var>artmsg</var>

</resource-bundle> • Fichero Articles.jsp:

<h:outputText value=“#{artmsg.ServerError}”/>

Page 62: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Parametrización de mensajes

• Fichero de propiedades:…Selección=El socio {0} ha sido seleccionado…

• Fichero Socios.jsp:<f:loadBundle basename=“…“ var=“sls“/><h:outputFormat value=“#{sls.Seleccion}”>

<f:param value=“#{socios.seleccion}”/></h:outputFormat>

• Permite cambiar el orden de las palabras en distintos idiomas.

Page 63: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes gráficas: Adaptación de mensajes de errores del usuario

<h:inputText id=“cap” label=“Capitulo”

value=“#{LibroBean.capNum}”

converterMessage = “#{ErrMsg.capE}”>

Page 64: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Internacionalización

• Forma idiomática (locale): Especifica un idioma, país y variante del idioma

• Ejemplo:– Inglés de Estados Unidos– Español de España, variante andaluza– Francés

• Se especifica mediante una cadena de la forma XXX_YYY_ZZZ– Ejemplo: en_US– Normalmente, el país se pone con mayúsculas

Page 65: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Internacionalización, II

• Ficheros de propiedades:ArticleMessages.propertiesArticleMessages_en_UK.propertiesArticleMessages_en_US.propertiesArticleMessages_es_ES.propertiesArticleMessages_es_MX.properties

• Alternativa:ArticleMessages_en.propertiesArticleMessages_es.properties

Page 66: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Internacionalización, III

• Cada navegador en cada PC tiene una preferencia idiomática establecida.

• Cada aplicación web puede tener una preferencia idiomática propia.

• En general, las componentes gráficas pueden establecer un locale específico.

Page 67: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Internacionalización, IV

• Preferencia idiomática de una aplicación JSF: Fichero faces-config.xml

<application><locale-config><default-locale>es_ES</default_locale>

<supported-locale>es_MX

</ supported-locale>

<supported-locale>en_UK

</ supported-locale>

</locale-config></application>

Page 68: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Internacionalización, V

• Internacionalización de aplicaciones web generales:

Exige programación en Java– Utilizar la clase PropertyResourceBundle,

construyendo instancias a partir de un locale y los ficheros de propiedades.

– Construir los mensajes que aparecen en las páginas a partir de los propertyResourceBundles consruidos.

Page 69: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Facelets: Plantillas

• Una plantilla es un documento de Facelets que tiene partes pendientes de rellenar.

• Las partes pendientes de rellenar pueden tener un contenido por defecto, que se sustituye por otro contenido cuando se instancia la plantilla.

• Por ejemplo, la tabla de la transparencia siguiente puede ser una plantilla.

Page 70: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Visualización de plantillasin instanciar

UAM Escuela Politécnica de Madrid

AquívasuMenú…

Aquí va su texto, que puede ser tan largo y aburrido como Vd. quiera, pero eso sí, lo tiene que escribir desde el principio hasta el final, porque si no aparecerá esto.

Page 71: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Codificación de la plantilla(fichero plantilla.xhtml)

<h:body> <table width=“100%” border=“1”>

<tr> <td> UAM </td>

<td> Escuela Politénica Superior> </td> </tr>

<tr> <td> <ui:insert name=“21”> Aquí <br>

su <br> menú <br> … </ui:insert> </td>

<td> <ui:insert name=“22”> Aquí su texto,

que puede ser tan largo y aburrido como …

</ui:insert> </td> </tr> </table> </h:body>

Page 72: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Instanciación de la plantilla(fichero instanciaciacion.xhtml)

<h:body>

<ui:composition template=“plantilla.xhtml”>

<ui:define name=“21”>

Servlets <br> JSP <br> JSF

</ui:define>

<ui:define name=“22”>

Bienvenido a la web de CLS. Aquí …

</ui:define> </ui:composition> </h:body>

Page 73: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Consideraciones acerca de la instanciación

• El contenido que se incluye en los huecos de una plantilla puede ser arbitrario. Por ejemplo, se pueden incluir formularios, tablas o elementos HTML de JSF de cualquier tipo y en cantidad arbitraria.

• También se pueden incluir componentes compuestas reutilizables, como un formulario que pide un texto al usuario y lo guarda en un lugar de memoria.

Page 74: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes compuestas:Ejemplo

Cantidad: Euros

• Las etiquetas “Cantidad:”, “Euros” y “OK” se pueden cambiar cada vez que se utiliza la componente.• También se pueden cambiar el nombre de la variable donde se guarda el valor introducido por el usuario y la URL destino.

OK

Page 75: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Utilización de lacomponente compuesta

<rm:introtext preetiqueta=“Cantidad:”

contenido=“#{cantidadBean}”

postetiqueta=“Euros”

botonok=“OK”

action=“index”/>

Preetiqueta Postetiqueta

Cantidad: Euros OKContenido BotonOK

Page 76: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Definición de lacomponente compuesta

• Idea: Se considera a la componente como una función de cinco argumentos: la preetiqueta, la cantidad, la postetiqueta, el botónOK y la action.

• Según hemos visto, en la utilización de la componente los valores de los argumentos se especifican indicando correlativamente sus nombres y valores, en lugar de escribir sus valores concatenados separados por comas.

Page 77: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Definición de lacomponente compuesta, II

• La definición de la componente es parte de un fichero xhtml, que incluye una cabecera (la especificación de los argumentos) y un cuerpo (la especificación de la componente en sí).

• Los argumentos se especifican dentro de una cláusula con etiqueta composite:interface, y cada uno lleva la etiqueta composite:attribute.

Page 78: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Definición de lacomponente compuesta, III

• La componente parametrizada (cuerpo de la definición) se especifica en la forma que le corresponde mediante cláusulas de Facelets dentro de una cláusula con etiqueta <composite:implementation>, incluyendo en los lugares donde tienen que aparecer los argumentos la fórmula UEL #{cc.attrs.nombreparam}, donde nombreparam es el nombre del parámetro que tiene que aparecer.

Page 79: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejemplo de definición de componente compuesta

<composite:interface>

<composite:attribute name=“preetiqueta”/>

<composite:attribute name=“contenido”/>

<composite:attribute name=“postetiqueta”/>

<composite:attribute name=“botonOK”/>

<composite:attribute name=“action”/>

</composite:interface>

Page 80: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejemplo de definición de componente compuesta, II

<composite:implementation>

<h:form>

<h:outputLabel

value=“#{cc.attrs.preetiqueta}”/>

<h:outputText

value=“#{cc.attrs.contenido}”/>

Page 81: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejemplo de definición de componente compuesta, III

<h:outputLabel

value=“#{cc.attrs.postetiqueta}”/> <h:commandButton

value=“#{cc.attrs. botonOK}”

action=“#{cc.attrs.action}”/>

</h:form>

Page 82: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Definición de lacomponente compuesta, IV

• El fichero xhtml con la definición de una componente se incluye en un directorio que corresponde a una biblioteca de recursos.

• El directorio es un subdirectorio de la forma /resources/nombreBiblioteca.

Page 83: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Utilización de lacomponente compuesta, II

• El fichero que utiliza la componente tiene que incluir la biblioteca igual que lo hace con las bibliotecas estándar de Facelets:

<html xmlns=http://www.w3.org/1999/xhtml

xmlns:f=“http://java.sun.com/jsf/core”

xmlns:h=“http://java.sun.com/jsf/html”

xmlns:ui=“http://java.sun.com/jsf/facelets”

xmlns:rm=“http://java.sun.com/jsf/composite/…”>

Donde … es el nombre del subdirectorio.

Page 84: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes compuestas y patrones de documentos

• Los atributos de las componentes compuestas son cadenas de caracteres, al igual que los de cualquier etiqueta en XML, y en particular los de componentes gráficas de Facelets.

• Las componentes compuestas no son documentos completos, sino que se incluyen en huecos de plantillas.

Page 85: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Componentes compuestas y patrones de documentos, II

• Las plantillas de documentos JSF son documentos que se pueden ver como funciones de los huecos que contienen.

• Desde este punto de vista, sus parámetros o argumentos son componentes, bien sean predefinidas en la biblioteca HTML de Facelets o definidas por usuarios como componentes compuestas.

Page 86: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejercicio opcional

• [JSF2] Diseñar una plantilla, una componente compuesta y dos páginas de Facelets que hagan lo siguiente:– La plantilla muestra en la parte superior un

formulario con un campo de texto y un botón “Show”, que hace que el texto introducido por el usuario se guarde en un atributo de sesión fijo; la parte inferior por defecto contiene el texto “Por determinar”.

Page 87: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejercicio opcional, II

• [JSF2] …– La primera página utiliza la plantilla para

mostrar en la parte inferior la imagen de un directorio que corresponde al texto introducido por el usuario en la parte superior.

– La componente compuesta muestra el contenido de una tabla, cuyo nombre es su único parámetro, de una base de datos fija.

Page 88: Java Server Faces. JSF Framework Java que permite construir páginas como interfaces de usuario –Distintos tipos de componentes. –Estados y eventos/funcionalidad

Ejercicio opcional, III

• [JSF2] …– La segunda página utiliza la plantilla y la

componente compuesta para mostrar en la parte inferior la tabla cuyo nombre introduce el usuario en la parte superior

(En general, la plantilla se puede utilizar para visualizar instanciaciones de componentes compuestas arbitrarias con un solo atributo)