Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF SessionScoped managedBean与ViewScoped managedBean结合使用_Jsf_Null_Managed Bean_Session Scope - Fatal编程技术网

JSF SessionScoped managedBean与ViewScoped managedBean结合使用

JSF SessionScoped managedBean与ViewScoped managedBean结合使用,jsf,null,managed-bean,session-scope,Jsf,Null,Managed Bean,Session Scope,我的项目中存在以下问题: 我们有2个具有以下配置的托管bean: @ManagedBean @SessionScoped public class SessionBean { private PersonnelFile personnelFile; // + getters/setters } @ManagedBean @ViewScoped public class ViewBean { @ManagedProperty("#{sessionBean}") priva

我的项目中存在以下问题:

我们有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实例,并由于ManagedProperty注释将SessionScoped bean设置回原处 当我调试它时,我可以看到对SessionScoped bean的引用保持不变,因此它是同一个对象 然而,我之前在SessionScoped bean中设置的对象已经变为null,这意味着他“丢失”了关于该对象的会话信息 我从来没有在SessionScoped bean中重置这个对象,所以我看不出它可能出了什么问题。。。 如果你想要更多的解释或如果你想让我更好地表达这个问题,请告诉我或使用编辑按钮

@BalusC
我想我们可能已经发现了问题所在。在web.xml中,我们使用了以下设置:

 <context-param>
     <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
     <param-value>client</param-value>
 </context-param>
现在,如果我理解正确的话,我们无法通过具有此设置的视图范围bean编辑会话范围bean的状态。。。我们能够更改会话范围bean的状态的唯一方法是在bean本身的构造函数或后构造函数方法中。从视图范围bean内部对会话范围bean所做的更改未在服务器上持久化

如果我们将此变量设置为“server”,则状态确实会保留在服务器上,而不是每次都传输到客户端。我知道这会在内存方面增加服务器的负载,但我想知道如何使用客户端方法解决问题


因此,我的问题已经解决,但我不确定解决方案是否理想…

我从未在SessionScoped bean中重置此对象。代码中肯定有什么东西改变了属性。没有魔法。根据目前提供的信息,我们无法指出任何潜在的原因。您需要在私人上设置一个可变的监视断点;调试器中的行。然后你可以检查试图改变它的堆栈。我想我们可能已经发现了问题。在我们的web.xml中,我们使用了以下设置:javax.faces.STATE\u SAVING\u METHOD server Hmm,您使用的是哪个JSF impl/版本?