Monday 30 January 2012

Paso de Valores entre páginas ADF




Uno de las funcionalidades requeridas en una aplicación WEB es el paso de valores entre las páginas ADF. Existen 2 maneras de realizar esta actividad que vamos a analizar en este post.




1. Uso de expresiones para declarar y usar las variables. Esta es la solución más rápida pero como explicaremos mas adelante la menos recomendable. Veamos un ejemplo rápido.




En la pagina origen creamos una caja de texto en su propiedad value definimos indicamos la variable a nivel de flujo donde se almacenará lo contenido en la caja de texto.




La expresión será así :




#{pageFlowScope.parametro}




Note que la pageFlowScope determina el alcance de la variable y parametro es el nombre de la variable.




image




En la página destino usamos la misma expresión para recuperar su valor. En este caso uso un componente del tipo label para mostrar el valor.




image




Probemos la pagina y veamos que efectivamente se pasa el valor de una página a otra.




image







Al ir a la siguiente página se recupera el valor.




image




Bien aparentemente la solución propuesta es suficiente para solucionar el paso de valores entre páginas, sin embargo hay un inconveniente en esta propuesta. Si por algún motivo la aplicación sufre un error inesperado, por ejemplo una excepción de null pointer, los valores se pierden y si el comportamiento de la aplicación dependía de los valores de estas variables entonces su aplicación empezará a comportarse de manera impredecible.




Entonces, como solucionamos estos?. Bueno existe una segunda manera de lograr el paso de valores, en este caso se utiliza un managed bean para compartir la información. La ventaja de esta técnica es que los valores se mantienen aún cuando se produzca un error no controlado en la aplicación.




Para implementarlo, primero vamos a crear un bean “PasoValor” con un sólo atributo llamado parámetro. Algo como esto.







package parbizu.valores.view;







public class PasoValor {
private String parametro;
public PasoValor() {
super();
}




public void setParametro(String parametro) {
this.parametro = parametro;
}




public String getParametro() {
return parametro;
}
}







Lo declaramos en el adfc-config.xml.




image







Lo aplicamos en nuestras páginas origen y destino solo que la expresión para acceder será.




#{pageFlowScope.pasoValor.parametro}




Note que en este caso, se incluye la referencia al managed bean pasoValor en la expresión.




El código quedaría así en la página origen.




image







En la página de destino terminaría así.




image







Si probamos esto, tendríamos lo siguiente.




image







image







Recomendamos hacer uso de esta segunda técnica para evitar la perdida de valores.




CODIGO EJEMPLO

No comments:

Post a Comment