Actualmente estoy aprendiendo sobre JSF 2.0 y estoy muy contento por la existencia de esta característica de alcance de conversación, que es muy útil para abrir una nueva pestaña o una nueva ventana en el misma página y tener recursos separados, sin anularse entre sí.JSF CDI: Conversation scope bean [s] best practice
Pero tengo curiosidad sobre cómo implementar esto de una buena manera, sobre cuándo iniciar la conversación y cuándo cerrarla.
En mi caso, tengo cada frijol CDI para cada página JSF. Y digamos que tengo un menú, y cuando se hace clic, esto llevará a la página A, y de A, podría conducir a B, B podría conducir a C, C podría llevar a D, todas estas 4 páginas están conectadas en una cadena.
Es posible acceder a las propiedades del grano A desde granos B o C o D, también es posible acceder a las propiedades de B a partir de granos C o D, etc.
Ahora estoy bastante confundido acerca de:
- si todas estas A B C D debe ser en ámbito de conversación o no, o tal vez sólo un ? Porque creo que a veces desde otra página que es fuera de la cadena ABCD, como una página F, podría navegar a la página B, aunque todavía no sé cómo suministrar los datos al bean B.
- si todas estas ABCD deben combinan en un grano de
- dónde y cuándo comenzar el conversación, im pensando en el constructor, pero yo no creo que es una buena idea , porque prefiero partir la conversación cuando se accede por primera vez la página, no el grano
- dónde y cuándo parar la conversación , por lo que que no habrá recursos no utilizados que cuelgan alrededor
Por favor, comparta sus ideas al respecto.
CDI no es parte de JSF estándar.CDI significa Contexts and Dependency Injection (JSR-299) que cubre las anotaciones del paquete 'javax.enterprise'. Conversation Scope tampoco es parte de JSF estándar. Fue una invención de JBoss Seam durante las edades de JSF 1.2 y ha sido adoptada por la especificación JSF 2.0 como View Scope, que se puede seleccionar mediante la anotación '@ ViewScoped'. Ahora, ¿de qué estás hablando en realidad? – BalusC
Hola BalusC, gracias por la aclaración. Usé el término CDI solo para aclarar lo que estoy usando, pero tal vez esa información no está relacionada con mi pregunta, mi disculpa :) Hasta donde sé, el @ViewScoped es para que una sola página se vuelva a mostrar y las propiedades serán persistió Pero lo que quería lograr desde el alcance de la conversación es que puedo abrir la misma página en varias pestañas, con cada pestaña como si tuviera su propio alcance de sesión. Por lo tanto, enviar el valor 'albert' en un myBean.name en una pestaña no anulará myBean.name en otras pestañas. Pero estoy confundido sobre dónde comenzar y finalizar la conversación. – bertie
Y esto me confunde más si hay 4 páginas, por ejemplo, la página A es una página de exploración, donde el usuario puede buscar, la página B es la página de detalles, donde el usuario puede modificar detalles, la página C es donde el usuario puede modificar sub detalle, y así sucesivamente. Si quisiera poder abrir la página A en varias pestañas sin que una afecte a otra, tengo que usar el alcance de conversación en el bean de A. Pero supongo que también será tema de conversación para B C y D? También sobre dónde y cuándo debería comenzar/finalizar la conversación. Quiero decir, el usuario puede abrir pestañas nuevas y cerrar las pestañas. ¿Cómo puedo detectar esto y cerrar la conversación? – bertie