java - JSF2 ApplicationScope bean实例化时间?

标签 java jsf jsf-2

在我看来,@ApplicationScoped bean 仅在第一次使用 EL 在页面中访问时才启动。

当我查询 ApplicationMap 时,是否会创建 @ApplicationScoped bean?

ExternalContext ec = currentInstance.getExternalContext(); result =
    ec.getApplicationMap().get(beanName);

在加载 XHTML 页面之前,我还能如何触发应用程序作用域 bean 的实例化?

最佳答案

您可以在 @ManagedBean 中使用 eager=true声明。

@ManagedBean(eager=true)
@ApplicationScoped
public class Config {

    // ...

}

这样,bean 将在 webapp 启动时自动创建。

除此之外,您还可以使用 Application#evaluateExpressionGet()以编程方式评估 EL 并因此在必要时自动创建 bean。另请参阅 this answer 上的示例.

FacesContext context = FacesContext.getCurrentInstance();
Confic config = (Config) context.getApplication().evaluateExpressionGet(context, "#{config}", Config.class);
// ...

您也可以将其作为 @ManagedProperty 注入(inject)将 bean 放在您需要的地方。

@ManagedBean
@RequestScoped
public class Register {

    @ManagedProperty("#{config}")
    private Config config;

    @PostConstruct
    public void init() {
        // ...
    }

    // ...
}

JSF 将在注入(inject)父 bean 之前自动创建它。它在 @PostConstruct 之外的所有方法中都可用。

关于java - JSF2 ApplicationScope bean实例化时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6967182/

相关文章:

java - LibGDX 项目未识别 Lombok

java - 如何测试java接口(interface)?

java - 我应该把提取所有类别并使其可见的代码放在哪里

java - selectitem 和 selectitems 标签的区别

java - 如何使 jsf @ManagedBean 也成为 @WebService

ajax - 如何以编程方式将 AjaxBehavior 添加到具有主界面的 UIComponent

java - 删除多个正则表达式的交集?

java - war 优化

validation - 抛出验证程序异常时显示错误详细信息

java - CSS 不显示在 Selenium WebDriver 中