Frage

Ich bin die Bewertung die Möglichkeit JSF in einer stark frequentierten Website zu nutzen. Mir wird gesagt, dass in JSF 2.0 der Komponentenbaum nicht in der Sitzung gespeichert wird, und dass nur Deltas gespeichert werden, sobald der Komponentenbaum modifiziert wird.

Hier ist die Seite, die ich bin die Anzeige:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:h="http://java.sun.com/jsf/html">
    <body>
        <h:form>
            hello, world
        </h:form>
    </body>
</html>

Jedes Mal, wenn ich diese Seite zu sehen, fast 1 K wird auf die Sitzung zugeordnet. Wenn ich den <form> Tag entfernen, nichts in der Sitzung gespeichert wird.

Jede Idee, warum der Komponentenbaum in der Session gespeichert wird? Ich würde denken, dass dies auf der Postbacks Anfrage berechnet werden.

War es hilfreich?

Lösung

Teilzustand Einsparung bedeutet nicht, dass der Staat nicht in der Sitzung gespeichert werden. Es bedeutet nur, dass ein Teil der Komponentenbaum Zustand wird anstelle der gesamte Komponentenbaum Zustand gespeichert werden. Die zentrale Idee der Teilzustandseinsparung ist, dass der Zustand der Komponenten, die von der Client-Seite in der nachfolgenden Anforderung gespeichert wird nicht geändert würden nicht werden. Stattdessen wird sie erhalten durch erneutes Ausführen des Ansicht auf der Serverseite während Ansicht wiederherzustellen. Nur die Komponente Zustand, der auf Änderungen durch die Kunden empfindlich ist (Formulare, Eingänge, Knöpfe, usw.) wird gespeichert. Die 1K, die Sie in der Sitzung sehen, ist der Teil Staat selbst.

Um es zu testen selbst, Makeln den Zustand ein- und ausgeschaltet durch die folgende context-param in web.xml:

<context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>false</param-value>
</context-param>

Sie werden feststellen, dass die Größe erhöht sich sehen, wenn die Einstellung false ist, was bedeutet, dass die gesamte Komponentenbaum statt gespeichert wird.

Es wird in der Sitzung gespeichert, denn das ist das einzige von dem Servlet-API zur Verfügung gestellt, die einen größeren Umfang als die Anfrage Anwendungsbereich hat. in Anfrage Umfang Speicherung würde keinen Wert haben, da sie nicht mehr auf der nachfolgenden Anforderung zur Verfügung stehen würden. Das Servlet API hat keine Vorstellung vom Umfang Ansicht wie als JSF hat (die unter der Decke ist, indirekt den Sitzungsbereich von der Art und Weise verwendet wird, Grundsätzlich ist der Ansichtszustand Komponentenbaum Zustand).

Sie tatsächlich sehen es nicht mehr, wenn Sie das Formular entfernen, da gibt es eigentlich nichts mehr übrig, die der Kunden ändern könnte (das heißt gäbe es kein Postbacks sein). Es würde keinen Sinn machen, den Zustand dann zu speichern. Außerdem würde es nichts sein, den Schlüssel des gespeicherten Zustandes als verstecktes Eingabefeld zu übergeben (mit dem Namen javax.faces.ViewState).

Siehe auch:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top