Dies wird geschehen, wenn Sie auf einem Postbacks von einem zum anderen Ansicht Navigation . Eine View-Scoped-Bean ist nicht an eine Anfrage, sondern an eine Ansicht gebunden. Wenn Sie also zu einer neuen Ansicht navigieren, wird eine brandneue Instanz der View-Scoped-Bean angezeigt. Es wird nicht dieselbe Bean-Instanz wiederverwenden, die einer vorherigen Ansicht zugeordnet ist.
Ich verstehe, dass die attivita
Bean in der ersten Ansicht erstellt und auf Postback wiederverwendet wird. Ich verstehe, dass nota
Bean mit der neuen Ansicht verknüpft ist, zu der Sie navigieren. Wenn Sie darin attivita
injizieren, erhält es einfach eine neue und unterschiedliche Instanz, obwohl es in derselben Anfrage noch eine weitere Instanz gibt. Dies ist alles erwartet (und zugegebenermaßen ein wenig unintuitives) Verhalten.
Es gibt keine Standard-JSF-Lösung dafür. CDI löst das mit @ConversationScoped
(die Bohne lebt so lange, wie Sie es ausdrücklich sagen zu leben) und die CDI-Erweiterung MyFaces CODI geht ein bisschen weiter mit @ViewAccessScoped
(die Bohne lebt, solange die navigierte Ansicht darauf verweist).
Sie können dies jedoch umgehen, indem Sie die Bean als Attribut im Anforderungsbereich speichern.
@ManagedBean
@ViewScoped
public class Attivita implements Serializable {
public String submit() {
FacesContext.getCurrentInstance().getExternalContext()
.getRequestMap().put("attivita", this);
return "nota";
}
}
und
@ManagedBean
@ViewScoped
public class Nota implements Serializable {
private Attivita attivita;
@PostConstruct
public void init() {
attivita = (Attivita) FacesContext.getCurrentInstance().getExternalContext()
.getRequestMap().get("attivita");
}
}
Beachten Sie, dass dies eher Hacky ist. Abhängig von der konkreten funktionalen Anforderung kann es bessere Lösungen geben. Beachten Sie auch, dass Sie in der nota
Ansicht die gewünschte Attivita
Bean-Instanz als #{nota.attivita}
und nicht als #{attivita}
referenzieren sollten, weil es Ihnen aus den bereits zuvor erläuterten Gründen eine neue und andere Instanz geben würde.
Achten Sie darauf, die richtigen Antworten zu markieren.Beim Stack Overflow geht es nicht nur um Fragen, sondern auch um Antworten. –