viernes, 7 de marzo de 2014

Guardar datos de una tabla (af:table) 2/2

En el artículo anterior vimos cómo añadir una tabla ( af:table), sobre la cual queríamos cambiar los datos.
Sin embargo al intentar guardar los datos éstos nos se guardaban.

En este artículo vamos a ver en qué momento los datos pasan de nuestra pantalla, donde tenemos los cambios a la aplicación.
También veremos cómo pasar de la aplicación a la base de datos.

En ADF existe una cosa que se llama ciclo de vida o lifecycle, en el cual se define los pasos por los que pasa una página antes de mostrarse en pantalla, o tras solicitar que se realice una acción.

Por eso en el artículo anterior, cambiamos los datos y éstos no cambiaban, o incluso el botón de commit, para que se guardaran los cambios, no estaba activo.


pantalla resultante ejemplo anterior
pantalla resultante ejemplo anterior



Vamos a hacer lo siguiente, vamos a ir al Components Palette, seleccionamos el componente CommandButton, y miramos en la pestaña de estructura (structure) para colocar el botón, dentro del subelemento Table facets, y a su vez dentro de Actions.
(ya explicamos más adelante lo que son los facets).


commandButton en facets af:table
commandButton en facets de af:table


y en la vista general. No olvidemos que este editor de diseño (Design), no es muy bueno con páginas complejas.


vista general jdeveloper

Ejecutamos la página nuevamente.


vista pagina con nuevo boton
vista página con el nuevo botón


Como podemos ver, al colocar el boton dentro del facet action, lo podemos ver tanto al comienzo como al final de la tabla (aunque sólo hemos puesto un botón). Esto nos recuerda a otros componentes de busqueda que hemos visto en otras páginas, por ejemplo en los correos web, donde es fácil encontrar los mismos botones al comienzo y al final del listado de correos.
No olvidemos que los componentes estan para facilitarnos muchas tareas, y es útil conocer lo que nos ofrece para aprovechar sus características.

El botón commandButon1 aparece habilitado, y sin embargo el de commit, no lo está.
Pulsemos el botón que hemos creado (da igual si el del principio o final de la tabla) y observemos lo que pasa.


vista aplicacion tras pulsar commandbutton
tras pulsar commandbutton1

Exactamente eso que estás pensando: Nada.
Vamos a cambiar al cuadro que aparece como "Steven K." por "Steven" tal como intentábamos en el post anterior.

cambio de datos en la aplicacion
vista página tras los cambios


Ahora el botón de commit se ha habilitado. La razón de esto (y también de que estuviera deshabilitado) la podemos encontrar si seleccionamos el botón en la pestaña de Structure o en el jspx (vista Design). Vamos a continuación a Properties Inspector.
Si pinchamos un par de veces nos encontraremos con esto:

property inspector boton commit
vista property inspector


En el atributo Disabled vemos:
#{!bindings.Commit.enabled}

Esto es una expresión que nos dice, que estará deshabilitado si bindings.commit.enabled es "false".
Este es un valor interno (ya veremos proximamente estos valores), que indica que la aplicación habilita el commit.
Como vimos hace un momento, pulsamos el botón commandButton1 y no pasó nada. Por lo que podemos ver que la aplicación cuando detecta un dato nuevo, habilita la posibilidad de guardar los datos.
Es decir: Una cosa es que la aplicación reconozca que ha habido un cambio en los datos que contiene, y otra cosa es que se decida guardar estos cambios en la base de datos.

En este ejemplo, si pulsamos el botón "commit", se procedería a guardar los cambios realizados.

pagina antes pulsar commit
antes de pulsar "commit"


En el property inspector podemos ver en la action:
#{bindings.Commit.execute}

Ya una vez guardado, podemos parar la aplicación, volver a entrar, y veremos que los cambios siguen estando.

pantalla resultado
pantalla resultante


Puedes descargar el ejemplo en la siguiente dirección Descargar Ejemplo

No hay comentarios:

Publicar un comentario