¿Cómo puedo destruir un bean con ámbito de sesión?

El propósito de esto sería controlar la vida útil del bean para que solo viva cuando una pestaña de la aplicación web esté activa. (Uso de la navegación de pestañas basada en Ajax en la aplicación web)

¿Existe una mejor manera de hacer eso? (¿Frijoles de ámbito personalizado?)

5
Ben 15 abr. 2012 a las 17:20

1 respuesta

La mejor respuesta

El bean con ámbito de sesión se crea en el primer HttpRequest que involucra a este bean. Destruido cuando session está invalidado. También puede destruirlo manualmente eliminándolo de HttpSession o sessionMap (pasar por FacesContext).

El hecho es que es ilógico crear un bean de ámbito de sesión que solo estará activo durante la vista de pestañas. Para este propósito exacto, definir un bean de ámbito personalizado será mejor, pero piénselo primero:

  • ¿Por qué necesita esa funcionalidad? ¿Por la memoria?

Bueno, podría ser bastante complicado, imagina que el usuario simplemente cambia entre las pestañas con bastante frecuencia y estás recreando el bean una y otra vez. Peor aún, ¿qué sucede si recupera datos de la base de datos en constructor o @PostConstruct. No será realmente eficiente.

Mi opinión es que debería olvidarse de él (a menos que lo necesite para otros fines) y elegir un bean Ver alcance . Este bean se inicializa después de acceder a la vista y vive hasta que no cambia a otra vista, por lo que no se obtiene DB en cada pestaña (sigue siendo la misma vista). En mi opinión, es mejor obtener datos enormes una vez que, por ejemplo, 15 veces ... Si no obtiene ningún dato, definitivamente elija Ver con alcance . Pero esa es solo mi opinión como dije.

Si no puede permitirse el alcance de vista , elija el bean de alcance personalizado , pero definitivamente no el alcance de sesión .

Más información para usted: BalusC en JSF 2.0

Espero que haya ayudado!

5
Fallup 15 abr. 2012 a las 19:32
2
Un bean de sesión se crea cuando se solicita por primera vez y no automáticamente cuando se crea la sesión.
 – 
Matt Handy
15 abr. 2012 a las 19:27
Handy sí lo siento, no sé en qué estaba pensando cuando escribí eso, tal error ... Pulgar hacia arriba por señalar. ¿Está bien ahora?
 – 
Fallup
15 abr. 2012 a las 19:31
No hay problema. No usaría el alcance de la sesión aquí.
 – 
Matt Handy
15 abr. 2012 a las 19:41
Gracias @Fallup, pero si solo uso la navegación AJAX, entonces no hay una diferencia real entre los ámbitos de vista y de sesión ... ¿verdad?
 – 
Ben
16 abr. 2012 a las 11:45
Si solo está considerando cambiar entre pestañas, entonces no. Pero si dejas el view donde están tus pestañas, entonces View scoped se destruyen pero Session scoped aún persistirá.
 – 
Fallup
16 abr. 2012 a las 16:05