我的项目中有以下问题:
我们有 2 个托管 bean,配置如下:
@ManagedBean
@SessionScoped
public class SessionBean {
private PersonnelFile personnelFile; // + getters/setters
}
@ManagedBean
@ViewScoped
public class ViewBean {
@ManagedProperty("#{sessionBean}")
private SessionBean sessionBean;
public void selectPersonnel() {
sessionBean.getPersonnelFile().setPerson(new Person());
}
}
这不是所有代码,但它可以让您大致了解情况:
- 保存会话对象的 SessionScoped bean
- ViewScoped bean,它包含与视图相关的对象和对 SessionScoped bean 的引用
现在的问题是:
- 我访问我的视图
- 我对同一个视图做了几次回传,每次都回到视图..到目前为止一切都很好
- 在某个时刻,我使用视图中的信息在 SessionScoped bean 中设置了我的会话对象,然后我离开了我的视图......到目前为止一切都很好
- 现在,当我返回此视图时,他创建了一个新的 ViewScoped bean 实例(如预期的那样)并将 SessionScoped bean 设置回来(因为 ManagedProperty 注释)
- 当我调试它时,我可以看到对 SessionScoped bean 的引用保持不变,所以它是同一个对象
- 但是,我之前在 SessionScoped bean 中设置的对象变成了
null
,这意味着他“丢失”了有关该对象的会话信息 - 我从来没有在 SessionScoped bean 中重置这个对象,所以我看不出它哪里出了问题......
如果您需要更多解释或希望我更好地表达这个问题,请告诉我或使用编辑按钮!