web-dev-qa-db-de.com

Was ist der Parameter STATE_SAVING_METHOD in JSF 2.0?

Ich kann die Funktion dieser Zeile in der Datei web.xml nicht verstehen

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>

Ich habe gelesen, dass der NetBeans-Standard Client ist. Ich bin gerade auf ein Problem gestoßen, bei dem meine Bewerbung viele Bohnen enthält, und das <param-value> wurde auf client gesetzt, also habe ich bekommen

Java.io.NotSerializableException

fehler, obwohl meine Beans serialisierbar waren (d. h. sie haben die serialisierbare Schnittstelle implementiert). Meine Bohnen waren in @ ViewScope. Aber als ich es auf Server umstellte, werden die Dinge funktionieren. Warum? Was ist der Unterschied, wenn ich Client und Server verwende? Kann mir jemand anhand eines Beispiels erklären.

Vielen Dank

44
Basit
Java.io.NotSerializableException

Diese Art von Ausnahme enthält normalerweise eine Nachricht in der Hauptursache, die den vollständig qualifizierten Klassennamen der Klasse angibt, die Serializable nicht implementiert. Sie sollten diese Meldung genau beachten, um herauszufinden, um welche Klasse es sich handelt, und dann Serializable entsprechend implementieren lassen.

Häufig ist es nicht immer ausreichend, only Ihre verwalteten Bean-Klassen serialisierbar zu machen. Sie müssen auch sicherstellen, dass jede ihrer Eigenschaften auch serialisierbar ist. Die meisten Standardtypen wie String, Long usw. implementieren alle bereits Serializable. (Benutzerdefinierte) komplexe Typen wie verschachtelte Beans, Entities oder EJBs sollten jedoch ebenfalls serialisierbar sein. Wenn etwas nicht wirklich als Serializable implementiert werden kann, wie z. B. InputStream, sollten Sie entweder das Modell neu entwerfen oder es transient erstellen (und bedenken, dass es null nach der Deserialisierung).


Was ist der Unterschied, wenn ich Client und Server benutze

Zunächst einige Hintergrundinformationen: Warum speichert JSF den Status von UI-Komponenten auf dem Server?

Der wichtigste technische Unterschied besteht darin, dass die Einstellung client den gesamten Ansichtsstatus als Wert des ausgeblendeten Eingabefelds javax.faces.ViewState In der generierten HTML-Ausgabe speichert und dass die Einstellung server ihn speichert in der Sitzung zusammen mit einer eindeutigen ID, auf die wiederum als Wert des ausgeblendeten Eingabefelds javax.faces.ViewState verwiesen wird.

Das Setzen auf client erhöht die Netzwerkbandbreitennutzung, verringert jedoch die Serverspeichernutzung, und das Setzen auf server verhält sich umgekehrt. Das Setzen auf client hat jedoch einen zusätzlichen funktionalen Vorteil: Es verhindert ViewExpiredExceptions, wenn die Sitzung abgelaufen ist oder wenn der Client zu viele Ansichten öffnet.

57
BalusC

Der Parameter javax.faces.STATE_SAVING_METHOD Gibt an, wo der Status gespeichert werden soll.

Wenn Sie den Status auf dem Server speichern möchten (dies ist die Standardeinstellung in der JavaServer Faces-Referenzimplementierung), geben Sie den Wert param-value Als server an.

Andernfalls können wir zum Speichern des Status auf der Clientseite client im param-value Angeben.

Wenn der Status auf dem Client gespeichert ist, wird der Status der gesamten Ansicht in einem ausgeblendeten Feld auf der Seite gerendert.

13
praveen