Está en la página 1de 10

Realizado por: Ascari Q.

Romo Pedraza

BEANS DE ALMACENAMIENTO
EN JAVASERVER FACES
Visual Web Pack

MUNDO BYTE
http://mundobyte.wordpress.com
domingo, 30 de noviembre de 2008

ESTA OBRA ESTA LICENCIADA BAJO CREATIVE COMMONS

http://creativecommons.org/licenses/by/2.5/mx/

Mundo Byte – http://mundobyte.wordpress.com


Realizado por: Ascari Q. Romo Pedraza

BEANS DE ALMACENAMIENTO

Los Beans de almacenamiento nos ofrecen la posibilidad de persistir datos en un determinado “scope” (alcance) como puede ser:

1. RequestBean - Nivel de Petición


2. SessionBean - Nivel de Sesión
3. ApplicationBean - Nivel de Aplicación

Estos beans se encuentran dentro del “source package”, en el paquete que lleva el mismo nombre de nuestro proyecto y sus nombres son más que
descriptivos, pero para no dejar nada a la imaginación de algún despistado, lo aclararemos.

BEAN DE PETICIÓN

El RequestBean o Bean de Petición, hace persistentes a los datos únicamente en un alcance de petición. Es decir, solo en el instante que el usuario
envía alguna petición al servidor y éste le responde. Una vez terminado este proceso, los datos almacenados habrán dejado de existir (Ilustración 1).

Para comprender muy bien lo anterior, vamos a realizar un sencillo ejemplo. Construiremos un formulario con los datos mostrados por la Ilustración 3
el cual enviaremos al servidor para que éste calcule la edad en base a la fecha de nacimiento y nos responda con una segunda página indicándonos
nuestra edad.

Debemos cambiar los valores del DropDown por Masculino y Femenino, para ello basta con dar clic derecho sobre el combo y escoger la opción
“Configure Default Options...”. Cabe aclarar que una cosa es el texto mostrado (display) y otra el valor en si (value), desde el código lo que
realmente recuperaremos es el valor y no el texto mostrado, en este caso, pondremos el mismo valor en ambos. Ahora bien, el siguiente paso es crear
los atributos nombre, apellido paterno, apellido materno, sexo y fecha de nacimiento en el RequestBean1 y crear sus métodos set y get.

RequestBean1
private String nombre; set / get
private String paterno; set / get
private String materno; set / get
private String sexo; set / get
private Date fecha; set / get
Tabla 1: Atributos

Mundo Byte – http://mundobyte.wordpress.com


Realizado por: Ascari Q. Romo Pedraza

Ilustración 1: Petición al servidor

Ilustración 2: Formulario

Mundo Byte – http://mundobyte.wordpress.com


Realizado por: Ascari Q. Romo Pedraza

Una vez creados los atributos, ya podemos recuperar los valores de cada uno de los campos del formulario y guardarlos en el RequestBean1, esto se
hará obviamente en el método action del botón (Ilustración 3).

Ilustración 4: Código del Botón

Ilustración 3: Método calculaEdad


A estas alturas ya sabemos que debemos agregar una “Visual Web JSF Page” que en mi caso le puse como nombre “RecibeDatos.jsp”. En esta última
página, agregamos el método mostrado en la Ilustración 4. La variable de objeto “cal” es una instancia de la clase GregorianCalendar que debemos
declarar (recuerde que en Java las declaraciones de variables se hacen dentro de la clase y fuera de cualquier método):

private GregorianCalendar cal;


y crearla en el constructor de la clase:
public RecibeDatos() {
cal = new GregorianCalendar();
}
Además será necesario agregar un atributo de tipo entero bajo el nombre de “edad” y crearle sus métodos set & get, ya que ahí mandaremos la
edad después de haberla calculado con el método calculaEdad() para posteriormente vincularla a una etiqueta. Localice el método “prerender()” y
escriba ahí las siguientes líneas:

Mundo Byte – http://mundobyte.wordpress.com


Realizado por: Ascari Q. Romo Pedraza

Date myReqValue = (Date) getValue("#{RequestBean1.fecha}");


cal.setTime(myReqValue);
calculaEdad();

La Ilustración 5 muestra un burdo diseño donde se nos mostrará la edad y los demás datos que llenamos en Formulario.jsp.

Las etiquetas señaladas con las flechas, han sido vinculadas. Para vincular un componente usted debe dar clic derecho y seleccionar la opción “Bind to
Data” y dirigirse a la pestaña “Bind to an Object”. Entonces usted debe vincular cada etiqueta con cada uno de los atributos correspondiente del
RequestBean. (Ilustración 6).

Ilustración 6: RecibeDatos.jsp

Ilustración 5: Vincular Componentes

Note algo muy importante, la etiqueta donde se muestra la edad, no esta vinculada con ninguna propiedad del RequestBean1 como sucede con las
demás etiquetas, en ves de eso, se vincula con la propiedad edad del “request/RecibeDatos” (Ilustración 6).

Mundo Byte – http://mundobyte.wordpress.com


Realizado por: Ascari Q. Romo Pedraza

Finalmente para ejecutar nuestro ejemplo, hemos de modificar el archivo faces-config.xml para crear una regla de navegación de la página
Formulario.jsp a RecibeDatos.jsp.

Ilustración 7: Regla de Navegación

Finalmente solo nos resta ejecutar nuestra aplicación. Si ha seguido con cuidado todos los pasos, al ejecutar el ejemplo, será capaz de visualizar algo
como lo mostrado por las Ilustraciones 8 y 9.

Mundo Byte – http://mundobyte.wordpress.com


Realizado por: Ascari Q. Romo Pedraza

Ilustración 8: Formulario

Mundo Byte – http://mundobyte.wordpress.com


Realizado por: Ascari Q. Romo Pedraza

Por último y para verificar lo que en un inicio comentamos acerca de que un dato guardado en un RequestBean solo es persistente a lo largo de la
petición, siga los siguientes pasos:

1. Agregue una nueva página con el nombre RecibeDatos2.jsp


2. Inserte un Button en la página RecibeDatos.jsp y en el archivo faces-config diseñe una regla de navegación hacia la página RecibeDatos2.jsp
3. Agregue una etiqueta en RecibeDatos2.jsp y vinculela con cualquier atributo del RequestBean1.

Ahora ejecute nuevamente el ejemplo. ¿Qué ocurre al pasar a la página RecibeDatos2.jsp?

EXÁCTO!!! NO VISUALIZA NADA, PUES HA VINCULADO EL COMPONENTE CON UN ATRIBUTO QUE TIENE UN ALCANCE DE
PETICIÓN, POR LO CUAL, EL DATO SOLO PERSISTE EN LA PETICIÓN “Formulario.jsp ---> RecibeDatos.jsp” PERO DE “RecibeDatos.jsp
---> RecibeDatos2.jsp” ES UNA SEGUNDA PETICIÓN, POR LO CUÁL EL VALOR YA HA EXPIRADO.

Ilustración 9: RecibeDatos

Mundo Byte – http://mundobyte.wordpress.com


Realizado por: Ascari Q. Romo Pedraza

BEAN DE SESIÓN

Ahora que ya comprendemos el alcance de un bean de petición, es realmente fácil comprender el bean de sesión. Basándonos en el anterior ejemplo,
agregue en el SessionBean1.java los mismos atributos del RequestBean1 (con sus respectivos métodos set&get) . Modifique el código mostrado en la
Ilustración 4 para guardar los datos en el SessionBean en lugar de guardarlos en el RequestBean.

setValue("#{SessionBean1.nombre}", nombre);
setValue("#{SessionBean1.paterno}", paterno);
….............

Ahora cambie la vinculación de todos los componentes de las páginas RecibeDatos.jsp y RecibeDatos2.jsp a los atributos del SessionBean1.

En RecibeDatos.jsp cambie la siguiente línea del método prerender()

Date myReqValue = (Date) getValue("#{RequestBean1.fecha}");

por esta otra:

Date myReqValue = (Date) getValue("#{SessionBean1.fecha}");

Finalmente si ejecuta de nueva cuenta el ejemplo, notará que al pasar a la página RecibeDatos2.jsp ya no aparece vacía, esto es por que ahora los datos
se encuentran almacenados en la sesión del usuario y ahora no importa por cuantas páginas usted pase, ese dato siempre estará disponible para cuando
usted lo requiera. Ahora si tiene más de un navegador instalado, abra una ventana de éste y teclee la siguiente dirección:
http://localhost:8080/beans_almacenamiento/faces/RecibeDatos2.jsp

Como puede observar, la página se visualiza vacía! Esto es por que la nueva ventana es considerada como otra sesión. Pero si abre una pestaña dentro
del mismo navegador, entonces se percatará que la página no se muestra vacía (ya que es la misma sesión).

BEAN DE APLICACIÓN
El ApplicationBean1 no merece explicación alguna, pues llegados aquí ya entenderá muy bien que cualquier dato guardado en este bean, será
persistente en toda la aplicación, independientemente de la sesión, ese dato estará ahí para todos las sesiones de todos los usuarios y si su valor es
modificado en una sesión surtirá efectos en todas las sesiones habidas y por haber! Como tarea, realice el ejemplo anterior con este Bean y pruebe en
diferentes navegadores.

Mundo Byte – http://mundobyte.wordpress.com


Realizado por: Ascari Q. Romo Pedraza

¿TE HA SIDO DE UTILIDAD ESTE TUTORIAL?

¿TE GUSTARÍA SEGUIR RECIBIENDO MÁS MATERIAL COMO EL QUE ACABAS DE LEER,
PARA FOMENTAR TU APRENDIZAJE?

SI LA RESPUESTA HA SIDO “SI” A LAS DOS PREGUNTAS ANTERIORES Y ESTAS INTERESADO EN


REALIZAR UN DONATIVO ECONÓMICO (NO IMPORTA LA CANTIDAD) CON EL CUÁL AYUDES A
SEGUIR GENERANDO CONTENIDO COMO ÉSTE, ESCRIBEME UN CORREO A: windoctor@mexico.com

SI NO ESTA EN TUS POSIBILIDADES REALIZAR UNA APORTACIÓN ECONÓMICA, PUEDES


ESCRIBIR ALGÚN COMENTARIO O SUGERENCIA EN MI BLOG SOBRE ESTE ARTÍCULO.

RECUERDA QUE EN LA MEDIDA DE TU APORTACIÓN, SE PODRÁN SEGUIR ESCRIBIENDO


ARTÍCULOS PARA TU BENEFICIO.

Mundo Byte – http://mundobyte.wordpress.com