JSF 2应用程序中的默认Managed Bean Scope是什么?

Bar*_*man 17 jsf

通常,默认范围是请求范围.我试图删除范围注释并期望bean有一个请求bean scopped行为(通过在前一页上返回一个提交的值,我记得我已经尝试过这个过去并且它工作正常)但我没有得到任何关于表达语言连接到它.那么什么是默认范围以及它为什么不是相同的行为?!

Bal*_*usC 43

取决于谁在管理bean.

如果它是JSF via @ManagedBean,则默认为@RequestScoped,如javadoc中所述:

如果省略范围注释,则必须像处理RequestScoped注释一样处理bean

如果它是CDI via @Named,则默认为@Dependent,如Weld文档中所述:

最后,CDI具有所谓的依赖伪范围.这是未明确声明范围类型的bean的默认范围.

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

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

默认: "singleton"

在效果中,这与JSF @ApplicationScoped和CDI的行为相同@ApplicationScoped.

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

也可以看看:

  • @BalusC我很困惑...你说ManagedBean的默认范围是NoneScoped,但文档说它是RequestScoped:"如果省略范围注释,则必须像处理RequestScoped注释一样处理bean"http:/ /docs.oracle.com/javaee/6/api/javax/faces/bean/ManagedBean.html (3认同)