lunes, 11 de agosto de 2014

Pasar un valor desde la pagina de diseño al ProcessScope con setActionListener

Descripción: En este artículo vamos a explicar cómo pasar un valor desde la página de diseño o vista de diseño al processScope. Para ello utilizaremos el componente setActionListener.
Nota: Este artículo está escrito para Oracle ADF 10g. La filosofía es similar para 11g, y más adelante veremos un artículo.

Para explicar este mecanismo vamos a utilizar un ejemplo en el que al pulsar un botón (commandButton) se pasará un valor al processScope, y se mostrará este valor en pantalla.

Colocamos en la página el commandButton con el que trabajaremos y le pondremos una etiqueta.
Vamos a ponerle como etiqueta: Asignar 3.

A continuación añadimos un componente setActionListener desde la paleta de componentes, como hijo del commandButton.

vista estructura de la pagina
vista estructura



se arrastra el componente desde el Component Palette
se arrastra el componente desde el Component Palette



Al arrastrarlo sobre el commandButton en la pestaña de Estructura, veremos que se nos abre una ventana de diálogo con el título "Insert SetActionListener".

datos necesarios para el setActionListener





Nos solicita dos valores:
From: Que sirve para indicar el valor de origen. Por ejemplo, si el valor proviene de una variable en un bean, de un processScope, de un valor que está en el binding, etc. También se puede colocar valores literales, por ejemplo, valores enteros, strings, etc.

To: El destino donde se guardará dicho valor. Puede ser una variable en un bean, el processScope, binding, etc. Aquí no podemos utilizar literales.

En la parte derecha tenemos unos botones con el título "Bind...", que nos abre un cuadro en el cual podemos buscar el elemento que queremos utilizar.






Buscamos el componente processScope, que estará en JSF Managed Beans / processScope.
Si no queremos buscarlo siempre podemos escribirlo directamente

#{processScope}

Hemos dicho que el processScope se puede ver como un array asociativo.
Si queremos crear una variable en el processScope basta con utilizarla directamente.
En nuestro ejemplo
#{processScope.valorGuardado}

asistente expresión del lenguaje
asistente expresión del lenguaje





Vamos a asignar un 3 al campo From, y luego en el To a la variabla valorGuardado dentro del processScope.


setActionListener campos from y to
setActionListener campos from y to


Vamos a crear otro botón que asigne un 4, y lo llamaremos Asignar 4.
Y a este botón le añadiremos un setActionListener que pasará el valor 4, a #{processScope.valorGuardado}

Con lo que cada vez que pulsemos un botón, estaremos pasando un valor.

Para este botón, he añadido el setActionListener, pulsando el botón derecho en el componente, e indicando en el menú contextual lo que queremos añadir. Tal como aparece en la siguiente imagen.

Añadiendo setActionListener desde el menú contextual
Añadiendo setActionListener desde el menú contextual






Finalmente para que podamos ver el valor que tiene actualmente processScope.valorGuardado, añadiremos un outputText que se actualizará cuando se refresque la página.
Nota: Este refresco ocurrirá porque el commandButton suele tener este efecto a menos que pongamos un partialSubmit.

Mostraremos el valor del processScope, simplemente escribiendo en el atributo value #{processScope.valorGuardado}


vista resultado
vista resultado

vista resultado
vista resultado




Conclusión:
Como hemos visto, el processScope es un mecanismo sencillo para guardar valores que queramos utilizar en otras páginas, sin tener que recurrir a un bean. De hecho en este ejemplo, no hemos tenido que utilizar código para poder guardar el valor o mostrarlo.



No hay comentarios:

Publicar un comentario