JSF lifecycle - Ausführen von managed bean Methode nach Anfrage komplette
Verwendung von JSF 2.0 und Spring, verwende ich eine @RequestScope
managed bean. Diese bean speichert Informationen über den angemeldeten Benutzer. Es lädt den Benutzer aus der DB in ein @PostConstruct
Methode:
@PostConstruct
public void init() {
String username = login.getUsername();
user = userDao.load(username);
}
Den angemeldeten Benutzer können dann Auslöser auf die Aktion auf der Seite, die updates der user in der Datenbank (mit anderen managed bean).
Jedoch die @RequestScope
bean aufgebaut ist, am Anfang der Anfrage, die vor dem Aufruf der Update-Aktion. Als Ergebnis, wenn die Seite erneut angezeigt wird, die User
variable hat immer noch Ihre alten Werte.
Meine Frage ist: muss ich einen Weg aus meinem laden-Methode nicht an den Anfang der Anfrage, aber nach die Anfrage gesendet wurde? Oder bin ich den Umgang mit dieser in die falsche Richtung?
Danke für deine Einsicht,
Sébastien
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den gleichen managed bean sollte wurden aktualisiert, zu diesem Zeitpunkt. Wenn Sie nicht die Wiederverwendung der gleichen managed bean aus irgendeinem Grund, dann sollten Sie manuell tun, indem Sie auf es in der action-Methode und dem Aufruf der setter selbst.
Update: auf der Grundlage der Kommentare, hier ist, wie die Bohnen sollten erklärt werden und injiziert und verwendet in Ihrer speziellen Anforderung:
login
wie in deinem code-Beispiel ist eigentlich session-scoped bean und auf diese Weise stellen Sie sicher, dass dieUser
enthält neue Daten, die auf jede Anfrage. Wenn dies nicht der Fall ist, dannUser
jeden Fall muss ein session-scoped bean.user
auf die Anfrage um sicherzustellen, dass die Daten regelmäßig aktualisiert werden. Mein Problem hier scheint zu sein, dass in meinem anderen managed-bean, dieuser
ich abrufen (z.B. aus der DB), und ändern Sie nicht weitergegeben werden, um die request-scoped bean (die bereits gebaut werden, wenn die Anforderung ausgelöst wurde, bevor den Anruf zu den anderen managed-bean, hat eine gewisse Logik auf es)User
- Eigenschaft (siehe deine Frage) in der bean, das den update-Auftrag.User user = new User()
während Sie sollte das nicht tun. Sollten Sie die eine, die verwaltet wird von JSF. Ich aktualisierte die Antwort auf inculude ein Beispiel, wie es funktionieren sollte. Edit: wieder den vorherigen Kommentar, als ich sagte "in der gleichen Klasse" meinte ich nicht sagen "in der gleichen Anfrage".@ManagedProperty
. Es würde geworfen haben, eine Ausnahme bei der Erstellung der session-scoped bean mit einer Meldung wie "Rahmen zu breit" (denn Sie würden nicht wissen, welcher request-scoped man sollte es Spritzen, es kann nämlich sein, mehr als einen request innerhalb einer session).