JavaServer Faces
JavaServer Faces
JavaServer Faces (JSF) es un framework para aplicaciones Java basadas en web que
simplifica el desarrollo de interfaces de usuario en aplicaciones Java EE. JSF usa
JavaServer Pages (JSP) como la tecnología que permite hacer el despliegue de las
páginas, pero también se puede acomodar a otras tecnologías como XUL.[1].
JSF incluye:
REPORT THIS AD
Desarrollar una sencilla aplicación JavaServer Faces requiere la realización de estos pasos:
1. Desarrollar los objetos del modelo, los que contendrán los datos.
2. Añadir las declaraciones del bean controlado al fichero de configuración de la aplicación.
3. Crear las páginas utilizando las etiquetas de componentes UI y las etiquetas “core”.
4. Definir la navegación entre las páginas.
REPORT THIS AD
La creacción de las páginas es responsabilidad del autor de páginas. Esta tarea implica
distribuir los componentes UI en las páginas, mapear los componentes a los datos de los
objetos del modelo, y añadir otras etiquetas importanes (como etiquetas del validador) a las
etiquetas de los componentes. Aquí tenemos la página greeting.jsp con las etiquetas de
validador (menos los HTML que lo rodea):
<HTML>
<HEAD> <title>Hello</title> </HEAD>
<%@ taglib uri=”http://java.sun.com/jsf/html” prefix=”h” %>
<%@ taglib uri=”http://java.sun.com/jsf/core” prefix=”f” %>
REPORT THIS AD
<body bgcolor=”white”>
<h:graphic_image id=”wave_img” url=”/wave.med.gif” />
<h2>Hi. My name is Duke.
I’m thinking of a number from 0 to 10.
Can you guess it?</h2>
<f:use_faces>
<h:form id=”helloForm” formName=”helloForm” >
<h:graphic_image id=”wave_img” url=”/wave.med.gif” />
<h:input_number id=”userNo” numberStyle=”NUMBER”
valueRef=”UserNumberBean.userNumber”>
<f:validate_longrange minimum=”0″ maximum=”10″ />
</h:input_number>
<h:command_button id=”submit” action=”success”
label=”Submit” commandName=”submit” /><p>
<h:output_errors id=”errors1″ for=”userNo”/>
</h:form>
</f:use_faces>
Esta página demuestra unas cuantas características importantes que utilizaremos en la
mayoría de nuestras aplicaciones JavaServer Faces:
La etiqueta form:
Esta etiqueta representa un formulario de entrada, que permite al usuario introducir algún
dato y enviarlo al servidor, normalmente pulsando un botón. Las etiquetas que representan
los componentes que conforman el formulario se anidan dentro de la etiqueta form. Estas
etiquetas son h:input_number y h:command_button.
REPORT THIS AD
REPORT THIS AD
La etiqueta input_number:
Esta etiqueta representa un componente que es un campo de texto, dentro del que el
usuario introduce un número. Esta etiqueta tiene tres atributos: id, valueRef, y numberStyle.
El atributo id es opcional y corresponde al identificador ID del componente. Si no incluimos
uno, la implementación JavaServer Faces generará uno automáticamente.
El atributo valueRef utiliza una expresión de referencia para referirse a la propiedad del
objeto del modelo que contiene los datos introducidos en el campo de texto. La parte de la
expresión que hay antes del “.” debe corresponder con el nombre definido por el elemento
managed-bean-name del bean controlado en el fichero de configuración. La parte de la
expresión que hay después del “.” debe corresponder con el nombre del elemento property-
name correspondiente en la declaración del propio bean controlado. En este ejemplo, no se
declararon elementos property-name porque no se inicializaron propiedades en la
arrancada de la aplicación para este ejemplo.
El atributo numberStyle indica el nombre del patrón de estilo de número definido según la
clase java.text.NumberFormat. Los valores válidos son: currency, integer, number, o
percent.
La etiqueta validate_longrange:
La etiqueta input_number también contiene una etiqueta validate_longrange, que es una
del conjunto de etiquetas validadores estándar incluido con la implementación de referencia
de JavaServer Faces.
Este validador chequea si el valor local de un componente está dentro de un cierto rango.
El valor debe ser cualquier cosa que se pueda convertir a long. Esta etiqueta tiene dos
atributos, uno que especifica un valor mínimo y otro que específica un valor máximo. Aquí,
la etiqueta se utiliza para asegurarnos de que el número introducido en el campo de texto
es un número entre el 0 y el 10.
La etiqueta command_button:
Esta etiqueta representa el botón utilizado para enviar los datos introducidos en el campo
de texto. El atributo action especifica una salida que facilita al mecanismo de navegación la
decisión de qué página abrir luego. La siguiente página describe esto en más detalle.
La etiqueta output_errors:
Esta etiqueta mostrará un mensaje de error si el dato introducido en el campo de texto no
cumple con las reglas especificadas por el validador. El mensaje de error se muestra en el
lugar de la página donde hayamos situado la etiqueta output_errors.
REPORT THIS AD
REPORT THIS AD
4. Definir las Navegación por las Páginas
Otra posibilidad que tiene el desarrollador de la aplicación es definir la navegación de
páginas por la aplicación, como qué página va después de que el usuario pulse un botón
para enviar un formulario.
El desarrollador de la aplicación define la navegación por la aplicación mediante el fichero
de configuración, el mismo fichero en el que se declararón los beans manejados. Aquí están
las reglas de navegación definidas para el ejemplo guessNumber:
<navigation-rule>
<from-tree-id>/greeting.jsp</from-tree-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-tree-id>/response.jsp</to-tree-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-tree-id>/response.jsp</from-tree-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-tree-id>/greeting.jsp</to-tree-id>
</navigation-case>
</navigation-rule>
Cada regla de navegación define cómo ir de una página (especificada en el elemento from-
tree-id) a otras páginas de la aplicación. El elemento navigation-rule puede contener
cualquier número de elemento navigation-case, cada uno de los cuales define la página
que se abrirá luego (definida por to-tree-id) basándose en una salida lógica (definida
mediante from-outcome).
La salida se puede definir mediante el atributo action del componente UICommand que
envía el formulario, como en el ejemplo guessNumber:
<h:command_button id=”submit”
action=”success” label=”Submit” />
La salida también puede venir del valor de retorno del método invoke de un objeto Action.
Este método realiza algún procesamiento para determinar la salida. Un ejemplo es que el
método invoke puede chequear si la password que el usuario ha introducido en la página
corresponde con la del fichero. Si es así, el método invoke podría devolver “success”; si no
es así, podría devolver “failure”. Un salida de “failure” podría resultar en la recarga de la
página de logon. Una salida de “success” podría resultar en que se mostrara una página
con las actividades de la tarjeta de crédito del usuario, por ejemplo.