我的应用程序中有一个@ManagedBean,带有@sessionScoped anotation。
问题是为每个请求调用了public no arg构造函数,因此我的字段被重置,我的模型逻辑进入空间。
我尝试构建并清理,重置glassFish,但仍然在每次请求时调用bean构造函数。 我还有一个faces-config.xml来控制页面导航。
我可以通过在faces-config中重新声明bean来解决这个问题,现在它可以工作......
为什么会发生这种情况的任何想法?如果我删除faces-config,问题仍然存在。
谢谢大家!
答案 0 :(得分:5)
如果@SessionScoped
不是javax.faces.bean
包,而是完全不同的API,例如javax.enterprise.context
包,则会发生这种情况。双击您的导入并小心IDE自动完成。 IDE倾向于按包名对自动建议进行排序,因此javax.enterprise.context
将显示为第一选项。
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class Bean {
// ...
}
如果您未在javax.faces.bean
上使用任何@ManagedBean
范围注释,则该bean将默认为@NoneScoped
,这意味着它在每个#{bean}
上构建EL评估。