Comenzamos con la construcción de nuestra capa de negocio.
8 - Capa de negocio: construcción de ManagedBeans
La capa de negocio es donde se concentra la operativa de nuestra aplicación, consistente en procesar los requerimientos del cliente, realizar las distintas operaciones solicitadas y/o planificadas, y construir los objetos necesarios para poder finalmente procesar, suministrar y/o almacenar la información resultante.Los ficheros de nuestra capa de negocio estarán ubicados en la carpeta "controllers".
Por otra parte, en JSF, los ficheros encargados de procesar la información son los denominados "ManagedBeans", que son ficheros java con anotaciones que los identifican como tales; éstos se encargan de interactuar tanto con la capa vista como con la capa de persistencia para la función que haya sido planificada.
Es buena práctica y conveniente, por diversas razones, construir un ManagedBean por cada fichero vista (página jsf) construido, aun cuando sea en algunos casos redundante. El mayor coste en términos de trabajo y mantenimiento es compensado por un mejor control y claridad en el diseño, sin contar los errores que pueden ocasionarse por un inadecuado diseño.
Así pues, por cada vista, un ManagedBean, que en nuestro caso van a ser:
index.xhtml => IndexBean.java
alta.xhtml => UsuariosBean.java
personales.xhtml => PersonalesBean.java
profesionales.xhtml => ProfesionalesBean.java
Los ManagedBeans deben tener la anotación @ManagedBean para que puedan ser identificados como tales. Es posible (y nosotros lo vamos a hacer) darles un nombre diferente al del fichero, mediante la anotación "name". Ese nombre simbólico servirá para linkar con las páginas vista, y es el que emplearemos en ellas para referirnos al ManagedBean.
Por otra parte, utilizaremos la anotación "Scoped" para que el contenedor de aplicaciones controle la duración del ciclo de vida de los beans. Cada vez que se llama a una página web se crea un objeto ManagedBean. La anotación por defecto es @RequestScoped, que le dice al contenedor que la información contenida en el ManagedBean tiene que ser creado cuando es llamado, y al ser abandonado ese objeto es marcado para destruirlo, evitándose la acumulación de objetos sin utilidad que podrían hacer caer el sistema por saturación.
@SessionScoped mantiene un objeto ManagedBean "vivo" como copia única (Standalone) en el contenedor de aplicaciones. Cada vez que se llama al jsf, éste llamará al mismo objeto, el cual mantendrá el estado. Este scoped interesa solo a aquellos ManagedBean que contengan información a utilizar durante toda la sesión. Hay que entender que sesión del usuario empieza cuando se conecta al sistema, y termina cuando se desconecta.
UsuariosBean, PersonalesBean y ProfesionalesBean tendrán RequestScoped. Sin embargo, IndexBean tendrá SessionScoped. Esto es porque IndexBean va a contener los datos del usuario identificado mediante un objeto static, objeto al cual van a consultar, modificar y/o borrar el resto de las páginas de nuestra aplicación.
Y sin más palabras, he aquí el primero de nuestros managedBeans:
IndexBean.java
@ManagedBean(name="identificacion")@SessionScoped
public class IndexBean {
private String login;
private String password;
protected static Usuarios usuario;
protected static String message;
public IndexBean() {
message="";
}
public String identifica() {
// comprobamos la identificacion
UsuariosDAO us=new UsuariosDAO();
usuario=us.identifyUser(login, password);
// si esta identificado mostramos datos personales
if (usuario!=null) return "personales.xhtml";
// en caso contrario, mostramos el error
message="ERROR en la identificación del usuario";
return "index.xhtml";
}
public String nuevo(){
return "alta.xhtml";
}
// GETTERS AND SETTERS
}
En un ManagedBean, los atributos son la forma estandarizada de enviar/recibir la información proveniente de la capa vista. Esto se deberá realizar a traves de los getters/setters correspondientes. Ya sabemos que, por seguridad y buena práctica, los atributos deben ser declarados private y accederse a ellos mediante getters/setters publics (encapsulación).
Los campos login y password del formulario contenido en index.xhtml enlazarán con los atributos login y password de este ManagedBean, ya veremos como.
Por otra parte, los métodos se enlazan con los botones y/o elementos a través de los actions de los elementos jsf del formulario. En concreto, el botón "Login" enlazará con el método identifica(), y el botón "Nuevo" enlazará con el método nuevo().
Observemos el detalle del tipo de retorno que tienen ambos métodos. Debemos entender como funciona este asunto:
Cuando un botón jsf es pulsado, se ejecutará el método correspondiente en el ManagedBean, ese método retornará un String entre otros datos. El formulario se reconstruirá con la respuesta del servidor y el String retornado se convertirá en el action (o sea, la redirección) del formulario. Por lo tanto, el String a retornar deberá ser la dirección de navegación a donde queramos redireccionar la página. Incluyendo permanecer en la página en donde estamos. Es por ello que, pulsando en "Nuevo", seremos redireccionados hacia alta.xhtml.
No obstante, recordemos que aún no hemos completado las vistas jsf con los links a los atributos y métodos de sus ManagedBean correspondientes.
En el siguiente post continuaremos con los siguientes ManagedBeans.
Anterior tema Siguiente tema
No hay comentarios:
Publicar un comentario