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 重新加载页面或更改页面后,会话Bean数据丢失_Jsf_Jsf 2 - Fatal编程技术网

Jsf 重新加载页面或更改页面后,会话Bean数据丢失

Jsf 重新加载页面或更改页面后,会话Bean数据丢失,jsf,jsf-2,Jsf,Jsf 2,我正在使用Wildfly 8服务器和JSF 2.2开发一个JSF项目 我有一个包含xhtml和beans+ejb的web部件以及一个mysql数据库 模型的一部分(EJB部分):Foo.java String name = ""; Object Foo2 = new Foo2(); 模型的一部分(EJB部分):Foo2.java private static final long serialVersionUID = 1L; String name = ""; 现在我输入了如下内容:in

我正在使用Wildfly 8服务器和JSF 2.2开发一个JSF项目

我有一个包含xhtml和beans+ejb的web部件以及一个mysql数据库

模型的一部分(EJB部分):Foo.java

String name = "";

Object Foo2 = new Foo2();
模型的一部分(EJB部分):Foo2.java

private static final long serialVersionUID = 1L;

String name = "";
现在我输入了如下内容:input.xhtml

<f:metadata>
    <f:event listener="#{ InputBean.init() }" type="preRenderView" />
</f:metadata>

<h:inputText 
    value="#{ InputBean.actualFoo.name }">
</h:inputText>

<h:selectOneMenu                                    
     value="#{InputBean.currentSelectedFoo2_ID}">
         <f:selectItems value="#{InputBean.lhm_AllFoo2}" />
</h:selectOneMenu>

还有一个bean:InputBean.java

@SessionScoped
@ManagedBean(name = "InputBean")
public class InputBean implements Serializable

private static final long serialVersionUID = 1L;

private Long currentSelectedFoo2_ID;

private LinkedHashMap<String, Object> lhm_AllFoo2;

private Foo actualFoo;

public InputBean() {
    lhm_AllPermissions = new LinkedHashMap<String, Object>();
    actualFoo = new Foo();
}

public void init()

    // Method of interface in EJB part which gives me all Foo2 to a list 
    List<Foo2> list_AllFoo2 = foo2Interface.getAllFoo2;

        if ((list_AllFoo2 != null) && (list_AllFoo2.size() > 0)) {
            for (Foo2 foo2 : list_AllBFoo2) {
                lhm_AllFoo2.put(foo2.getName(), foo2.getId());
            }
        }
@SessionScoped
@ManagedBean(name=“InputBean”)
公共类InputBean实现可序列化
私有静态最终长serialVersionUID=1L;
私有长currentSelectedFoo2\u ID;
私人LinkedHashMap lhm_AllFoo2;
私人食品实际食品;
公共InputBean(){
lhm_AllPermissions=新建LinkedHashMap();
actualFoo=新Foo();
}
公共void init()
//EJB部分中的接口方法,它将所有Foo2都提供给一个列表
List\u AllFoo2=foo2Interface.getAllFoo2;
if((list_AllFoo2!=null)&&(list_AllFoo2.size()>0)){
对于(Foo2 Foo2:list_AllBFoo2){
lhm_AllFoo2.put(foo2.getName(),foo2.getId());
}
}
当我在inputField中输入数据并选择data(数据)时,selectonemenu(选择一个菜单),然后重新加载页面(f5)或更改到另一个页面(同一项目)并返回,输入字段中的数据仍然可用,但selectonemenu(选择一个菜单)重置为默认值

我试图调试这个问题,但是当访问init时数据已经丢失,之前没有调用bean的setter。构造函数也没有被调用,所以一切似乎都是正确的。未链接到输入的bean数据也不会丢失


这是一个正常的JSF问题吗?有没有办法解决这个问题?

但是以一种格式发布代码。。。并调试应用程序。设置断点检查发生了什么。。。我几乎100%相信你会找到原因,然后我想给你尽可能少的无用代码,认为这样的最低限度的代码更好地找到问题。我还认为这是一个典型的jsf问题,因为我在项目的每一个部分都遇到了这个问题,输入不是直接写在模型中的。我已经调试了整个bean和两个模型,当它们被访问时,代码已经丢失了。我已经添加了SelectedFoo2\u ID,需要一些时间才能为您提供更多数据,因为这是合理的。感谢到目前为止的响应:)您是否通过
new
而不是
@PostConstruct
在构造函数中注入来获取EJB对象?找到了问题。我没有将ajax添加到每个输入字段中,因此它们不会将数据直接保存到bean中。