Es scheint, dass sowohl MyFaces als auch Mojarras JSF 2.1-Implementierungen heute (April 2012) Defekte im Bereich des partiellen Speicherns von Zuständen aufweisen und dass PARTIAL_STATE_SAVING auf "false" gesetzt sein sollte.
Stimmt das?
Sollen PARTIAL_STATE_SAVING auf false gesetzt werden?
Nur , wenn Sie einen allgemeinen Fehler in Verbindung mit dem Speichern von Teilzuständen in Ihrer Webanwendung feststellen, der wirklich nicht anders gelöst / bearbeitet werden kann. Partielle Zustandsspeicherung hat nämlich große Vorteile hinsichtlich der Gesamtleistung und der Speichernutzung. Siehe auch Warum speichert JSF den Status von UI-Komponenten auf dem Server?
Ich kann nicht zu 100% zuverlässig für MyFaces sprechen, aber in Mojarra wird sich die Ursache für Probleme im Zusammenhang mit der partiellen Zustandsspeicherung manifestieren, wenn Sie ein Attribut eines Tag-Handlers binden (Tag-Handler sind an der fehlenden% -Angabe erkennbar). co_de% -Attribut für das Tag, wie zB JSTL-Tags) zu einer View-Scoped-Bean, oder wenn Sie das rendered
oder id
-Attribut einer JSF-Komponente an eine View-Scoped-Bean binden (diese Attribute werden nämlich während des Aufbaus aufgelöst / Wiederherstellen der Ansicht).
Dieses Problem wird durch ein Hühnerei-Problem verursacht, wie in JSF-Problem 1492 und JSF spec issue 787 : Bei Aktivierung des partiellen Statusspeichers wurden die View-Scoped-Beans im Status der Teilansicht gespeichert. Um also View-Scoped-Beans zu extrahieren, muss der Partial View-Zustand wiederhergestellt werden. Beim Wiederherstellen (Erstellen) der Ansicht wird die EL in allen oben genannten Attributen bewertet. Da zu diesem Zeitpunkt jedoch keine Instanz für den bereichsbasierten Bereich verfügbar ist, wird eine brandneue Instanz erstellt. Dies hat jedoch alle seine Eigenschaften auf Standard gesetzt! Nach dem Wiederherstellen der Ansicht und dem Zurückholen der ursprünglichen Ansichtsbereichsbeans werden diese in den Ansichtsbereich zurückversetzt, wobei die beim Wiederherstellen der Ansicht erstellten (temporären) Instanzen überschrieben werden. Aber die EL-Ausdrücke dieser Attribute wurden bereits basierend auf einer völlig anderen Instanz ausgewertet und können nicht wiederhergestellt werden.
Dieses Henne-Ei-Problem wurde seit Mojarra 2.1.18 und 2.2.0 durch das Speichern von View-Scoped-Beans in Session gelöst. Wenn Sie aus irgendeinem Grund kein Upgrade durchführen können, kann dies in der Tat gelöst werden, indem Sie das Speichern des partiellen Status deaktivieren, indem Sie binding
auf javax.faces.PARTIAL_STATE_SAVING
setzen. Eine Alternative besteht darin, die oben genannten Attribute nicht nur an eine View-Scoped-Bean zu binden, sondern nach einer alternativen Lösung zu suchen.
Sie könnten stattdessen auch false
festlegen. Auf diese Weise können Sie eine durch Kommas getrennte Liste aller Ansichts-IDs angeben, für die die teilweise Statusspeicherung deaktiviert werden muss:
Auf diese Weise können Sie so gut wie möglich partielle Statusspeicherung nutzen und sie nur für eine Teilmenge von Ansichten deaktivieren, bei denen die Probleme mit teilweiser Statusspeicherung wirklich nicht behoben werden können.
javax.faces.FULL_STATE_SAVING_VIEW_IDS
schlägt in Tag-Handlern fehl