Sie tun müssen, als Luiggi und speichern Daten legten nahe, vorübergehend in der Sitzung oder die Daten übergeben (oder Schlüssel ausreicht, um die Daten erneut abzurufen) über Abfrageparameter zur Zielansicht. Dies ist auch dann der Fall, wenn Sie ein neues Fenster/Tab nicht umleiten und/oder nicht darauf abzielen.
Ansichtsbereich ist seltsam. Es existiert nur so lange, wie der Benutzer auf derselben Ansicht bleibt. Wenn JSF erkennt, dass von der Ansicht weg navigiert wurde, werden automatisch alle Beans zerstört, die sich auf diese Ansicht beziehen.
Sie können auf zwei Arten zu einer anderen Ansicht navigieren. Die erste ist eine Anfrage ohne Gesichter, wie zum Beispiel von h:link
oder h:button
. In diesem Fall wird die vorherige Ansicht nicht wiederhergestellt, so dass JSF nicht weiß, dass es zu zerstörende View-Scoped-Beans gibt. Die zweite ist eine Faces-Anfrage, beispielsweise von h:commandLink
oder h:commandButton
, die etwas anderes als void
oder null
zurückgibt. In diesem Fall gibt es ein Postback für die Ansicht, das wiederhergestellt wird, um die Aktion zu verarbeiten. Wenn das Ergebnis dieser Aktion darin besteht, von dieser Ansicht weg zu navigieren, oder umleiten, werden alle Beans, die auf diese Ansicht beschränkt sind, zerstört.
Unter der Haube, View-Bereich ist im Wesentlichen Session-Bereich mit einigen integrierten Semantik zum Aufräumen "alter" Daten. Dies funktioniert tatsächlich gut, wenn Benutzer die Anwendung nicht in mehr als einem Fenster/Tab öffnen und nur die in der Anwendung bereitgestellte Navigation verwenden (d. H. Nicht die Schaltflächen zum Zurück/Vorwärts des Browsers). Da wir jedoch von Webbrowsern sprechen, ist der Ansichtsbereich meines Erachtens ziemlich nutzlos (mit der einzigen Ausnahme, dass Sie den Zielbrowser steuern und den Zurück-/Vorwärts-/Neuladevorgang/Standort vollständig deaktivieren können, aber das ist nicht der Fall Es klingt nicht so, als wärst du in einer solchen Umgebung.
Die Bean sollte @Session sein, damit dies funktioniert. Als letzte Ressource können Sie die Daten in der Sitzung speichern und sie im Konstruktor der anderen Bean wiederherstellen. –