verwenden Sie einfach nicht ansehen/Session Beans scoped (so verwenden nur Anforderung oder Anwendung scoped Bohnen) und setzte Zustand client
statt (Standard) server
speichern, indem Sie die folgenden Kontextparameter in web.xml
Einstellung.
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
Dann JSF wird die Sitzung nicht erstellen und den Ansichtszustand in einem verborgenen Eingabefeld mit dem Namen javax.faces.ViewState
in Form bei Bedarf speichern.
Die Kosten für die Erstellung und Verwaltung der Sitzungen sind jedoch ziemlich vernachlässigbar. Außerdem müssen Sie die Kosten für die Serialisierung des Ansichtszustands und der Netzwerkbandbreite bei Verwendung der Statusspeicherung auf der Clientseite abwägen.
aktualisiert nach Ihrem Kommentar:
@BalusC Ja, könnte dies eine globale Lösung. Aber ich brauche diese Methode nur auf dieser öffentlichen Seite. Auf anderen Seiten möchte ich die serverseitige Zustandsspeichermethode.
Ah richtig. Entschuldigung, ich sehe keine schönen Möglichkeiten in JSF/Facelets, um die Sitzung zu deaktivieren oder das Speichern des Ansichtszustands auf Anfrage zu ändern. Ich würde in Erwägung ziehen, ein einfaches HTML <form>
anstelle eines JSF <h:form>
zu verwenden, lassen Sie es an eine andere JSF-Seite übergeben und verwenden Sie @ManagedProperty
in der Bean, die der JSF-Seite zugeordnet ist. Z.B.
<form action="register.jsf" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" />
</form>
mit
@ManagedBean
@RequestScoped
public class Register {
@ManagedProperty(value="#{param.username}")
private String username;
@ManagedProperty(value="#{param.password}")
private String password;
@PostConstruct
public void init() {
// Do your thing here.
System.out.println("Submitted username/password: " + username + "/" + password);
}
// ...
}
@BalusC Hinzugefügt warum in Frage. – angelcervera