VI.4.1. La elección del alcance de los Managed Beans

La elección del alcance depende de los datos que contiene el managed bean. Se usa @RequestScoped cuando solo se despliegan datos en la página asociada. Se usa @ViewScoped cuando se incluyen elementos ajax en la página (validación ajax, diálogos, etc.). Si es necesario tener un mismo dato disponible durante toda la sesión, entonces utilizaremos @SessionScoped, por ejemplo datos específicos del cliente, como el usuario y las preferencias de usuario (idioma, etc). Y se utiliza @ApplicationScoped para datos o constantes de uso común, como listas desplegables que son iguales para todos. También puede usarse para beans administrados que sólo tienen métodos, sin atributos.


Abusar del alcance @ApplicationScoped para los datos que son de sesión, vista, o solicitud (request), hará que los datos se compartan entre todos los usuarios, y que cualquiera pueda ver los datos de los demás. El uso abusivo de @SessionScoped para datos que son de vista, o request, hace que los datos perduren más tiempo del necesario y podría haber inconsistencias al navegar de una vista a otra porque se complica mantener los datos actualizados. Si usamos un bean @RequestScoped para datos que deberían ser @viewScoped entonces los datos se reinicializan al valor predeterminado en cada postback (ajax), y posiblemente no funcionarán bien los formularios.