II.6 Ligado de datos de la página web con el managed bean

Cuando se instancia una página web (.xhtml), se instancia también su managed bean asociado. En la Figura VIII 3 se ilustra el caso en el que se despliega un facelet en el navegador, en ese momento se instancian todos los managed beans asociados con ese facelet, lo que implica que en ese momento se ejecutan los constructores de los managed beans.



Cada vez que el usuario modifica el dato de uno de los campos de la página web, automáticamente se modifica su atributo correspondiente en el managed bean asociado. A esto se le conoce como ligado de datos (data binding en ingles).






Es muy importante comprender lo que sucede con la vida de los managed beans en función de su alcance, para poder llevar un control adecuado de la información.


@RequestScoped.-El constructor del Managed Bean se ejecuta cada vez que se hace un request desde la página asociada al bean (desplegar, pulsar un botón,...). Los datos del bean se actualizan cada vez que se construye bean y se pierden cuando el managed bean desaparece.


En la siguiente figura se ilustra en qué momentos se activa y se desactiva el ManagedBean que tiene un alcance “request”.





@ViewScoped.-Su constructor se ejecuta cada vez que se despliega la página asociada al bean. Los datos se actualizan automáticamente con cada visita a la página y se pierden cuando la página desaparece, ya que también desaparece el managed bean.


En la siguiente figura se ilustra en qué momentos se activa y se desactiva el ManagedBean que tiene un alcance “view”.






@SessionScoped.-El bean se instancia la primera vez que se despliega su página asociada y permanece activo durante la sesión del usuario. Esto tiene la ventaja de que los datos del bean permanecen durante toda la sesión, pero hay que tomar en cuenta que los datos de la página asociada no se actualizan automáticamente cada vez que ésta se visita, y que el constructor solamente se ejecuta una vez.


En la siguiente figura se ilustra en qué momentos se activa y se desactiva el ManagedBean que tiene un alcance “sesion”.