Это произойдет, если вы переходите от одного представления к другому при обратной передаче. Компонент с областью видимости привязан не к запросу, а к представлению. Поэтому, когда вы переходите к новому представлению, оно получает совершенно новый экземпляр bean-компонента с областью видимости. Он не будет повторно использовать тот же экземпляр компонента, который связан с предыдущим представлением.
Я понимаю, что bean-компонент attivita
создается в начальном представлении и повторно используется при обратной передаче. Насколько я понимаю, компонент nota
связан с новым представлением, к которому вы переходите. При внедрении в него attivita
он просто получит новый и отдельный экземпляр, даже если в том же запросе есть другой экземпляр. Все это ожидаемое (и, по общему признанию, немного неинтуитивное) поведение.
Для этого нет стандартного решения JSF. CDI решает эту проблему с помощью @ConversationScoped
(бин живет до тех пор, пока вы явно указываете ему жить), а расширение CDI MyFaces CODI идет немного дальше с @ViewAccessScoped
(бин живет до тех пор, пока на него ссылается навигационное представление).
Однако вы можете обойти это, сохранив 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
как на #{nota.attivita}
, а не как на #{attivita}
, потому что это даст вам новый и другой экземпляр по причинам, уже объясненным ранее.
person
BalusC
schedule
09.01.2013