JSF 2 应用程序中的缺省受管 Bean 作用域是什么



通常默认范围是请求范围。我尝试删除范围注释,并期望 bean 具有请求 bean 范围的行为(通过在上一页上返回提交的值,我记得我过去尝试过并且工作正常(,但我没有得到任何关于连接到它的表达式语言。那么默认范围是什么,为什么它的行为不一样?!

取决于谁在管理豆子。

如果它是通过 @ManagedBean 的 JSF,那么它默认为 @RequestScoped ,如 javadoc 中所述:

如果省略了作用域注释,则必须像存在RequestScoped注释一样处理 Bean

如果它是 CDI 通过 @Named ,则默认为 @Dependent ,如 焊接文档中所述:

最后,CDI 具有所谓的依赖伪作用域。这是未显式声明作用域类型的 Bean 的缺省作用域。

其效果是在每个 EL 表达式上新创建的 Bean 实例。因此,假设一个登录表单具有两个引用 Bean 属性的输入字段和一个引用 Bean 操作的命令按钮,因此总共有三个 EL 表达式,那么实际上将创建三个实例。一个设置了用户名,一个设置了密码,一个用于调用操作。实际上,这的行为与 JSF @NoneScoped 相同。这证实了您看到的症状。

如果是 Spring via @Component ,那么它默认为 @Scope("singleton") ,如 javadoc 中所述:

默认值:"singleton"

实际上,这的行为与 JSF @ApplicationScoped 和 CDI @ApplicationScoped 相同。

Netbeans与它无关。它只是一个像记事本一样的编辑工具,但随后具有1000 +额外功能。

另请参阅:

  • 什么是 none 作用域 bean,何时使用它?
  • 如何选择合适的豆类范围?

最新更新