2010-05-26 13 views
24

In JSF gibt es eine Ansichtszustand mit jeder Seite verbunden, die usw. hin und her mit vorträgt geben wirdWas ist ViewState in JSF und wie wird es verwendet?

Ich weiß, dass Ansichtszustand auf der Seite, die die Zustände der verschiedenen Kontrollen berechnet wird, und dass Sie speichern Es ist entweder Client-Seite oder Server-Seite.

Die Frage ist: Wie wird dieser Wert verwendet? Wird es verwendet, um die beim Senden gesendeten Werte zu validieren, um sicherzustellen, dass die gleiche Anfrage nicht zweimal gesendet wird?

Auch, wie ist es berechnet - ich erkenne, dass Richfaces anders als MyFaces berechnet werden kann, aber eine Idee wäre nett.

Danke.

+0

Gegenwärtig gibt es eine Debatte über den Ansichtszustand in der JSF-Gemeinschaft. Siehe diesen Fehlerbericht: http: // java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1055 –

Antwort

24

Die Frage ist: Wie wird dieser Wert verwendet? Wird es verwendet, um die Werte zu validieren, die bei submit gesendet werden, um sicherzustellen, dass die gleiche Anfrage nicht zweimal gesendet wird?

Der ursprüngliche Grund, warum der Viewstatus existiert, ist, weil HTTP zustandslos ist. Der Status der Komponenten über die Anforderungen hinweg muss auf die eine oder andere Art beibehalten werden. Entweder Sie speichern den Status im Speicher auf dem Server und binden ihn an die Sitzung oder serialisieren/deserialisieren ihn in der Anforderung/Antwort jedes Mal.

AFAIK, der Viewstatus wird nicht verwendet, um doppelte Submit zu erkennen, aber es könnte, wenn Sie einen Zeitstempel oder etwas ähnliches anhängen.

Der Viewstatus kann auch verschlüsselt werden, um sicherzustellen, dass der Client ihn nicht ändert.

Auch, wie wird er berechnet - ich merke, dass Richfaces anders myfaces berechnet werden kann, sondern eine Idee wäre schön.

Jede Komponente ist verantwortlich sein Zustand mit saveState und restoreState (siehe diese tutorial) bestehen bleiben. So führen unterschiedliche Komponentensuiten zu unterschiedlichen Ansichtszuständen. In ähnlicher Weise können unterschiedliche JSF-Implementierungen zu einem anderen Ansichtszustand führen.

+0

"Entweder Sie speichern den Status im Speicher auf dem Server und binden ihn an die Sitzung oder serialisieren/deserialisieren ihn jedes Mal in der Anfrage/Antwort." Wie wähle ich eine über die andere? –

+1

@KorayTugay gibt es einen Parameter javax.faces.STATE_SAVING_METHOD in der Konfig – ewernli

+0

Vielen Dank. –

13

Wenn Sie mit JavaScript vertraut sind, können Sie sich einen JSF-Komponentenbaum ein wenig wie ein HTML-DOM vorstellen, wobei die HTML-Seite den Anfangszustand definiert, Sie ihn jedoch zur Laufzeit ändern können.

Die Ansichtstechnologie (normalerweise JSP oder Facelets) definiert den Anfangszustand, aber danach kann es programmatisch manipuliert werden. Zum Beispiel könnten Sie eine component hinzufügen oder eine setzen. Damit dies ordnungsgemäß funktioniert, muss der Ansichtszustand zwischen den Anforderungen beibehalten werden.

Der Ansichtszustand ist in zwei Teile unterteilt. Die erste definiert die Struktur des Komponentenbaums:

UIView 
- UIForm 
    - UICommand 
    - UIInput 

Der zweite Teil definiert den Zustand der Komponenten. Diese sind aufgrund von Komponenten wie UIData getrennt, wo es für Kinder beispielsweise möglich ist, pro Zeilenstatus zu verfügen. Dies wird über die Mechanismen StateHolder gemarshallt/unmarshaliert.

Verwandte Themen