【问题标题】:JSF session ManagedBean instantiated at each request在每次请求时实例化 JSF 会话 ManagedBean
【发布时间】:2011-11-09 22:41:07
【问题描述】:

我的应用中有一个@ManagedBean,带有@sessionScoped 注释。

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

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

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

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

谢谢大家!

【问题讨论】:

  • @Shahzeb:OP 肯定在使用 JSF2。否则,@ManagedBean 将无法在类中导入,也无法在每个请求中构造。

标签: jsf constructor javabeans


【解决方案1】:

如果@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 {
    // ...
}

如果您没有在 @ManagedBean 上使用任何 javax.faces.bean 范围注释,则 bean 将默认为 @NoneScoped,这意味着它是在每个 #{bean} EL 评估上构建的。

另见:

【讨论】:

  • javax.enterprise.context 是什么意思?
  • @Shahzeb:那是 CDI(与@Named 一起使用,可与@Inject 一起使用,等等)。
  • 哦!这正是问题所在……比你好多了!该死的 NetBeans 自动完成功能!
猜你喜欢
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 2023-03-12
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
相关资源
最近更新 更多