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

JSF会话ManagedBean在每个请求中实例化,jsf,constructor,javabeans,Jsf,Constructor,Javabeans,我的应用程序中有一个@ManagedBean,带有@sessionScoped anotion 问题是,每个请求都会调用public no-arg构造函数,因此我的字段会被重置,而我的模型逻辑会变为空格 我尝试构建并清理、重置glassFish,但每次请求都会调用bean构造函数get。 我还有一个faces-config.xml来控制页面导航 我可以通过重新定义faces配置中的bean来解决这个问题,现在它可以工作了 你知道为什么会这样吗?如果删除faces配置,问题仍然存在 谢谢大家 如果

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

问题是,每个请求都会调用public no-arg构造函数,因此我的字段会被重置,而我的模型逻辑会变为空格

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

我可以通过重新定义faces配置中的bean来解决这个问题,现在它可以工作了

你知道为什么会这样吗?如果删除faces配置,问题仍然存在


谢谢大家

如果
@SessionScoped
不属于包,而不是完全不同的API(例如包),则可能发生这种情况。仔细检查您的导入,并小心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将默认为,这意味着它是在每个
{bean}
EL计算上构造的

另见:
  • (与此问题相反)

如果
@SessionScoped
不属于包,而不是完全不同的API(例如包),则可能发生这种情况。仔细检查您的导入,并小心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将默认为,这意味着它是在每个
{bean}
EL计算上构造的

另见:
  • (与此问题相反)

@Shahzeb:OP肯定在使用JSF2。否则,
@ManagedBean
就不能在类上导入,也不能在每个请求上构造。@Shahzeb:OP肯定在使用JSF2。否则,
@ManagedBean
就不能在类上导入,也不能在每个请求上构造。什么是
javax.enterprise.context
!这正是问题所在…比你更重要!该死的自动完成!什么是
javax.enterprise.context
!这正是问题所在…比你更重要!该死的自动完成!