を管理。ビュースコープBeanは要求に結びついておらず、ビューに結びついています。したがって、新しいビューに移動すると、ビュースコープ付きBeanの新しいインスタンスが作成されます。以前のビューに関連付けられた同じBeanインスタンスを再利用しません。
最初のビューでattivita
のBeanが作成され、ポストバックで再利用されることを理解します。私はnota
beanがあなたがナビゲートしている新しいビューに関連付けられていることを理解しています。 attivita
を注入すると、まったく同じリクエストに別のインスタンスがあるにもかかわらず、新しいインスタンスが作成されます。これはすべて予想される(そして、まったく直感的ではない)振る舞いです。
これには標準のJSFソリューションはありません。 CDIはこれを@ConversationScoped
で解決します(Beanは明示的に生きている限りBeanが存続します)。また、CDI拡張MyFaces CODIは@ViewAccessScoped
でさらに進んでいます(ナビゲーションビューが参照する限り、Beanは存続します)。
しかし、これを回避するには、リクエストスコープに属性としてBeanを格納します。
@ManagedBean
@ViewScoped
public class Attivita implements Serializable {
public String submit() {
FacesContext.getCurrentInstance().getExternalContext()
.getRequestMap().put("attivita", this);
return "nota";
}
}
と
@ManagedBean
@ViewScoped
public class Nota implements Serializable {
private Attivita attivita;
@PostConstruct
public void init() {
attivita = (Attivita) FacesContext.getCurrentInstance().getExternalContext()
.getRequestMap().get("attivita");
}
}
これはかなりハックされることに注意してください。具体的な機能要件によっては、より良い解決策があるかもしれません。 nota
ビューで希望のAttivita
beanインスタンス(#{nota.attivita}
およびは)を#{attivita}
とする必要があります。なぜなら、これまでに説明した理由から、新しいインスタンスを提供するからです。
正しい返答に注意してください。スタックオーバーフローは、それだけでなく、答えについての質問でもあります。 –