通常默认范围是请求范围。我尝试删除范围注释,并期望 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,何时使用它?
- 如何选择合适的豆类范围?