JSF 2.0 partielles Speichern des Zustands scheint nicht zu funktionieren

8

Ich evaluiere die Möglichkeit, JSF in einer stark frequentierten Website zu verwenden. Mir wurde gesagt, dass in JSF 2.0 der Komponentenbaum nicht in der Sitzung gespeichert wird und dass nur Deltas gespeichert werden, sobald der Komponentenbaum geändert wurde.

Hier ist die Seite, die ich gerade betrachte:

%Vor%

Jedes Mal, wenn ich diese Seite anschaue, wird fast 1K der Sitzung zugewiesen. Wenn ich das <form> -Tag entferne, wird nichts in der Sitzung gespeichert.

Irgendeine Idee, warum der Komponentenbaum in der Sitzung gespeichert wird? Ich würde denken, dass dies auf die Postback-Anfrage berechnet würde.

    
SamBeran 08.12.2010, 18:00
quelle

1 Antwort

20

Das Speichern von Teilstatus bedeutet nicht, dass der Status in der Sitzung nicht gespeichert wird. Es bedeutet nur, dass ein Teil des Komponentenbaumstatus anstelle des gesamten Komponentenbaumstatus gespeichert wird. Die Grundidee des partiellen Zustandsspeicherns besteht darin, dass der Status von Komponenten, die bei der nachfolgenden Anforderung nicht von der Clientseite geändert werden, nicht gespeichert wird. Stattdessen wird es durch erneutes Ausführen der Ansicht auf der Serverseite während der Wiederherstellungsansicht erstellt. Es wird nur der Komponentenstatus gespeichert, der auf Änderungen durch den Client reagiert (Formulare, Eingaben, Schaltflächen usw.). Die 1K, die Sie in der Sitzung sehen, ist der Teilzustand selbst.

Um es selbst zu testen, schalten Sie den Status mit dem folgenden context-param in web.xml :

ein und aus %Vor%

Sie werden sehen, dass die Größe zunimmt, wenn die Einstellung false ist, was bedeutet, dass der gesamte Komponentenbaum stattdessen gespeichert wurde.

Es wird in der Sitzung gespeichert, da dies nur von der Servlet-API bereitgestellt wird, die einen größeren Bereich als der Anforderungsbereich aufweist. Das Speichern im Geltungsbereich der Anforderung hätte keinen Wert, da es bei der nachfolgenden Anforderung nicht mehr verfügbar wäre. Die Servlet-API hat keine Vorstellung vom Ansichtsbereich, wie es JSF hat (was unter den Abdeckungen ist, die indirekt den Sitzungsumfang verwenden, im Grunde ist der Ansichtszustand der Komponentenbaumstatus).

Sie sehen es tatsächlich nicht mehr, wenn Sie das Formular entfernen, da tatsächlich nichts mehr übrig ist, was der Client ändern könnte (d. h. es würde kein Postback geben). Es würde keinen Sinn machen, den Staat zu retten. Außerdem würde nichts den Schlüssel des gespeicherten Zustands als verstecktes Eingabefeld weitergeben (mit dem Namen javax.faces.ViewState ).

Siehe auch:

BalusC 08.12.2010, 19:35
quelle