¿Debería PARTIAL_STATE_SAVING establecerse en falso?

Parece que hoy (abril de 2012), tanto MyFaces como las implementaciones JSF 2.1 de Mojarra tienen defectos en torno al ahorro de estado parcial y que PARTIAL_STATE_SAVING debe establecerse en falso.

¿Es esto cierto?

¿Debería PARTIAL_STATE_SAVING establecerse en falso?

Solo cuando encuentre un defecto general relacionado con el ahorro de estado parcial en su aplicación web, que realmente no se puede resolver / solucionar de otra manera. El ahorro parcial de estado tiene grandes ventajas en cuanto al rendimiento general y el uso de la memoria. Consulte también ¿Por qué JSF guarda el estado de los componentes de la interfaz de usuario en el servidor?

No puedo hablar con MyFaces de manera confiable al 100%, pero en Mojarra la raíz de los problemas relacionados con el ahorro parcial de estado se manifestará cuando se vincula cualquier atributo de un manejador de tags (los manejadores de tags son reconocibles por la falta del atributo rendered en el etiqueta como tags JSTL) a un bean con ámbito de vista, o cuando está vinculando el id o el atributo de binding de un componente JSF a un bean de ámbito de vista (esos atributos se resuelven durante la construcción / restauración de la vista).

Este problema es causado por un problema de huevo de gallina como se describe en el problema JSF 1492 y el problema de especificación JSF 787 : con el ahorro de estado parcial habilitado, los frijoles con ámbito de vista se almacenaron en el estado de vista parcial. Por lo tanto, para extraer beans de ámbito de vista, el estado de vista parcial debe restaurarse. Durante la restauración (construcción) de la vista, se evaluará el EL en todos los atributos antes mencionados. Sin embargo, dado que en este momento no hay ninguna instancia de bean con ámbito de vista disponible, se creará una nueva instancia. ¡Sin embargo, esto tendrá todas sus propiedades configuradas por defecto! Después de restaurar la vista y recuperar los beans de ámbito de vista original, se volverán a colocar en el ámbito de vista, anulando las instancias (temporales) creadas durante la restauración de la vista. Pero las expresiones EL de esos atributos ya han sido evaluadas en base a una instancia completamente diferente y no se pueden restaurar.

Este problema de huevo de gallina está resuelto desde Mojarra 2.1.18 y 2.2.0 almacenando granos de habas de vista en sesión. Si no puede actualizar por algún motivo, esto puede resolverse desactivando el estado parcial guardando javax.faces.PARTIAL_STATE_SAVING en false . Una alternativa es simplemente no unir los atributos antes mencionados a un bean de ámbito de vista, sino buscar una solución alternativa.

También puede establecer javax.faces.FULL_STATE_SAVING_VIEW_IDS en javax.faces.FULL_STATE_SAVING_VIEW_IDS lugar. Esto le permite especificar una lista separada por comas de todas las ID de vista para las cuales se debe desactivar el ahorro de estado parcial:

  javax.faces.FULL_STATE_SAVING_VIEW_IDS /some.xhtml,/other.xhtml  

Esto le permite beneficiarse de un ahorro de estado parcial tanto como sea posible y desactivarlo solo para un subconjunto de vistas en las cuales los problemas relacionados con el ahorro parcial de estado no pueden repararse.

Ver también:

  • Comunicación en JSF 2.0 – @ViewScoped falla en los controladores de tags