Comencé a cuestionarme el javax.faces.bean.ViewScope cuando tenía dos beans prácticamente iguales, salvo que uno sobrevivía varios requests a la misma página y el otro no, lanzándome un

javax.ejb.NoSuchEJBException: Could not find stateful bean:

Finalmente resultó que éste error se debía a un NullPointer Exception, el cual probablemente destruía el UIViewRoot, y por lo tanto también mi bean que ya no se encontraba en la siguiente fase.

Sin embargo, más me llamó la atención que, habiendo creado en ambos beans un método anotado @PreDestroy para observar cuándo era que se eliminaban, el bean que sí funcionaba nunca fue destruído.

Ingenuamente había pensado que el bean vivía tanto como el navegador siguiera en la misma página, y que se eliminaba al navegar a otra, pero resulta que no es tan así.

En esta discusión >> de hecho, se dice que es un comportamiento deseado pues se espera poder volver atrás con el browser y que los datos sigan ahí, tener varias vistas abiertas, etc.

La respuesta definitiva pareciera ser que el mapa de vistas se destruye al llamar a FacesContext.setViewRoot(arg); o que las vistas expiran junto con la sesión.

En este último caso cabe preguntarse qué ventajas nos trae usar el ViewScope por sobre el SessionScope si es que com ambos estaremos sobrecargando la sesión igualmente.

Hace falta investigar un poco más…

Este sitio utiliza cookies.    Leer más