我的项目中存在以下问题:
我们有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());
}
}
这不是所有的代码,但它给你一个关于sitatution的一般概念:
现在的问题是:
null
,这意味着他“丢失”了有关该对象的会话信息如果您想要更多解释,或者您希望我更好地说出这个问题,请告诉我或使用编辑按钮!
答案 0 :(得分:0)
@BalusC 我想我们可能已经发现了这个问题。在我们的web.xml中,我们使用以下设置:
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
现在,如果我理解正确,我们就无法通过具有此设置的视图范围bean来编辑会话范围的bean的状态...我们能够改变会话状态的唯一方法-scoped bean,是bean本身的构造函数或PostConstruct方法。从视图范围的bean内部对会话范围的bean所做的更改未在服务器上保留。
如果我们将此变量设置为“server”,则状态确实持久存储在服务器上,并且不会每次都传输到客户端。我理解这会在内存方面给服务器带来更多负担,但我想知道如何使用client
方法解决问题。
所以,我的问题已解决,但我不确定解决方案是否理想......