JSF

55
Java Server Faces

Transcript of JSF

Page 1: JSF

Java Server Faces

Page 2: JSF

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 JSP asociadas.

Page 3: JSF

JSF-JSP: Algunas características

• Especificación en las etiquetas de vías de acceso a recursos (imágenes, etc) relativas y absolutas para el servidor. Traducción automática al cliente.

• Asociación directa con datos de la aplicación (Java Beans, etc) de datos en las etiquetas:– 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 4: JSF

JSF-JSP: Algunas características, II

• La especificación del controlador MVC pasa a un fichero de configuración XML

• 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 informació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 5: JSF

Ejemplo sencillo de aplicación JSF

Aplicación que:

• Pide al usuario que se identifique.

• Tras pulsar un botón, se muestra al usuario en otra página la información textual disponible para él.

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

Page 6: JSF

Ejemplo sencillo deaplicación JSF, II

• Páginas web: Identificación e información• Página de identificación:

– Campo de texto que pide la identificación– Campo de texto para introducir la identificación– Botón para pedir la información

• Página de información:– Campo de texto que muestra la identificación– Campo de texto que muestra la información– Botón para volver a la página inicial

Page 7: JSF

Ejemplo sencillo deaplicación JSF, III

• Modelo de datos, indicado en faces-config.xml:– Bean de aplicación con la tabla de usuarios-info – Bean de sesión con el usuario actual y su info.

• Control de la navegación, indicado en faces-config.xml: Se pasa de la página de identificación a la de información y de ésta a la de identificación mediante eventos de acción (cadena de caracteres)

• Botones: CommandButtons con acción asociada de ejecución (método sin argumentos que devuelve String de la clase del bean).

Page 8: JSF

Directivas

• <%@ pagecontentType="application/xhtml+xml“

%>• <%@ taglib

uri="http://java.sun.com/jsf/html“prefix="h“

%>• <%@ taglib

uri="http:.//java.sun.com/jsf/core“prefix="f“

%>

Page 9: JSF

Controlador y componente principal

• Carga del servlet javax.faces.webapp.FacesServlet al arrancar la aplicación (se incluye en web.xml con la indicación

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

• Todas las componentes JSF están en ficheros JSP dentro del cuerpo de una etiqueta <f:view>.

Page 10: JSF

Etiquetas y componentes

• Hay dos tipos de etiquetas JSF: Las etiquetas de componentes gráficas (HTML) y las etiquetas de carácter transversal (core).

• Clases: Etiquetas, componentes y mostradores (renderers). Se genera un mini-Dom ampliado.

• Cada etiqueta de componente gráfica da lugar a un objeto de la clase de componente correspondiente y un renderer, formando los primeros un árbol.

• Ejemplo: La etiqueta h:inputtext genera una componente UIInput con un mostrador de texto.

Page 11: JSF

Funcionalidad de etiquetas transversales

• Acciones para la manipulación de eventos

• Conversión de datos

• Validación de datos

• Internacionalización

(se describirán más adelante)

Page 12: JSF

Ciclo de vida(generación de respuestas)

1. Crear o reusar árbol de componentes2. Aplicar parámetros de la petición3. Validar valores obtenidos y ejecutar

acciones de eventos de cambio de valor4. Incorporar datos de la aplicación5. Ejecutar acciones de eventos a nivel de

aplicación (botones, enlaces, etc)6. Crear respuestaEn cada etapa se pueden generar eventos

Page 13: JSF

Ciclo de vida, II

123 abc

6HTML

1 Crear

2Pasar

3 Validar4

Incorporar

5Eventos

Aplicación

Page 14: JSF

Depuración

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

Page 15: JSF

Componentes gráficas:Estructura general

<f:view>

<h:form>

</h:form>

</f:view>

Page 16: JSF

Componentes gráficas: Texto fijo

• <h:outputText

value=“${price}”

lang=“en_US”

/>

Page 17: JSF

Componentes gráficas:Campo de texto

• <h:inputText

required=“true”

maxLength=“3”

value=#{book.price}>

</h:inputText>

Page 18: JSF

Componentes gráficas: Imagen

• <h:graphicImage

height=“20”

length=“100”

value=“/images/book.gif”

/>

Page 19: JSF

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

• <h:selectOneMenu

id="selectOneCar“

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

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

</h:selectOneMenu>

Page 20: JSF

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

• <h:selectManyCheckbox

id="cars“

value="#{carsBean.car}">

<f:selectItems

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

</h:selectManyCheckbox>

Page 21: JSF

Componentes gráficas:Recuadros seleccionables

• <h:selectBooleanCheckbox

title="emailUpdates“

value="#{jsfex.wantsUpdates}" >

</h:selectBooleanCheckbox> <h:outputText

value="Would you like email

updates?"/>

Page 22: JSF

Componentes gráficas: Paneles

Tabla con números

1 2

3

Pie de tabla

Page 23: JSF

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 24: JSF

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 25: JSF

Componentes gráficas:Mensajes de errores del usuario

• Incluye todos los mensajes de error:<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 26: JSF

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

• <h:commandButtonaction=“#{bean.method}”value=“OK”

/>• <h:commandLink

action=“#{bean.method}”value=“UAM”

/>

Page 27: JSF

Modelo de datos de aplicaciones basadas en JSF

• Normalmente, cada página JSF muestra datos de un objeto específico, que suele ser un bean o una colección de beans asociados a la página.

• JSF permite asociar de manera simple un objeto a cada página JSF. La especificación del objeto asociado a una página se hace mediante el fichero de configuración faces-config.xml en lugar de utilizar un servlet.

• El proceso de asociación de objetos a páginas JSF se denomina gestión de los beans.

Page 28: JSF

Modelo de datos de aplicaciones basadas en JSF, II

• La gestión de los beans se lleva a cabo mediante la invocación del constructor por defecto del bean.

• En caso de que el valor asignado a un atributo por el constructor por defecto no sea el deseado, la especificación del bean gestionado por una página JSF determinada puede asignarle otro valor.

Page 29: JSF

Modelo de datos en JSF: Ejemplo de especificación de beans gestionados

<managed-bean><managed-bean-name>uNumber</managed-bean-name><managed-bean-class>gn.UNumber</managed-bean-class><managed-bean-scope>session</managed-bean-scope><managed-property>

<property-name>minimum</property-name><property-class>long</property-class><value>0</value>

</managed-property>…

• Acceso a la información: ${uNumber.minimum}.

Page 30: JSF

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 31: JSF

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 32: JSF

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 33: JSF

Ejemplos de validadores

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

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

/></h:inputText>

Page 34: JSF

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 35: JSF

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 36: JSF

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 37: JSF

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 38: JSF

Recordatorio: Ciclo de vida

123 abc

6HTML

1 Crear

2Pasar

3 Validar yeventos c.v.

4Incorporar

5Eventos

Aplicación

Page 39: JSF

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 40: JSF

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 41: JSF

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 42: JSF

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 43: JSF

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 44: JSF

Ejercicios obligatorios

• [JSF1] Escribir en un documento de texto la lista de tareas necesarias para implementar el ejemplo sencillo de aplicación JSF descrito en estas transparencias.

• [JSF2] Implementar el ejemplo sencillo de aplicación JSF descrito en estas transparencias.

Page 45: JSF

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 46: JSF

Inclusión de mensajes:Carga selectiva

• Fichero Articles.jsp:

<f:loadBundle

basename=“articles.ArticleMsgs“

var=“artmsg“/>

<h:outputText

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

Page 47: JSF

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 48: JSF

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 49: JSF

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

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

value=“#{LibroBean.capNum}”

converterMessage = “#{ErrMsg.capE}”>

Page 50: JSF

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 51: JSF

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 52: JSF

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 53: JSF

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 54: JSF

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 55: JSF

Ejercicios optativos

• [JSF3] Complementar la aplicación del ejercicio anterior de manera que se pueda hacer la gestión a través de ella de los usuarios y mensajes asociados.

• [JSF4] Completar la aplicación del ejercicio anterior incorporando una versión en otro idioma