通常默认范围是请求范围。我试图删除范围注释并期望 bean 具有请求 bean 范围行为(通过在前一页上返回提交的值,我记得我过去尝试过这个并且它工作正常)但我什么也没得到连接到它的表达语言。那么默认范围是什么,为什么它的行为不同?!
问问题
18008 次
1 回答
44
取决于谁在管理 bean。
如果它是JSF via @ManagedBean
,那么它默认为@RequestScoped
,如javadoc中所述:
如果省略范围注释,则必须像
RequestScoped
存在注释一样处理 bean
如果是CDI via @Named
,则默认为@Dependent
,如Weld 文档中所述:
最后,CDI 具有所谓的依赖伪作用域。这是未显式声明范围类型的 bean 的默认范围。
效果是 bean 实例是在每个 EL 表达式上新创建的。因此,想象一个登录表单,其中有两个输入字段引用一个 bean 属性和一个命令按钮引用一个 bean 操作,因此总共有三个 EL 表达式,那么实际上将创建三个实例。一个设置了用户名,一个设置了密码,一个设置了操作。实际上,它的行为与 JSF 相同@NoneScoped
。这证实了您所看到的症状。
如果是Spring via @Component
,则默认为@Scope("singleton")
,如javadoc中所述:
默认:
"singleton"
实际上,它的行为与 JSF@ApplicationScoped
和 CDI相同@ApplicationScoped
。
Netbeans 与它无关。它只是一个像记事本一样的编辑工具,但具有 1000 多个额外功能。
也可以看看:
于 2013-10-11T15:57:54.697 回答