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
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 ViewExpiredException
s, wenn die Sitzung abgelaufen ist oder wenn der Client zu viele Ansichten öffnet.
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.