在每个请求中实例化JSF会话ManagedBean

时间:2011-11-09 22:41:08

标签: jsf constructor javabeans

我的应用程序中有一个@ManagedBean,带有@sessionScoped anotation。

问题是为每个请求调用了public no arg构造函数,因此我的字段被重置,我的模型逻辑进入空间。

我尝试构建并清理,重置glassFish,但仍然在每次请求时调用bean构造函数。 我还有一个faces-config.xml来控制页面导航。

我可以通过在faces-config中重新声明bean来解决这个问题,现在它可以工作......

为什么会发生这种情况的任何想法?如果我删除faces-config,问题仍然存在。

谢谢大家!

1 个答案:

答案 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评估。

另见: