在JSF22中替换@ManagedBean(eager = true)

时间:2014-04-11 13:59:30

标签: jsf jsf-2.2 eager

我正在寻找替换JSF 2.2中的@ManagedBean(eager=true)注释的解决方案。

我很好地记录了提案such as,它允许在应用程序启动时执行代码。

但我需要访问FacesContext,因此此解决方案不起作用:FacesContext.getCurrentInstance()此时仍为空。

我试图在SPI中找到AfterDeploymentValidation的替代品,但一无所获。

由于DeltaSpike的开发人员似乎不打算对@ManagedBean(eager=true)实施替换,而且OmiFaces尚不支持这种解决方案,see。我正在一个瓶子里发送信息。

目前,我只是在我的webapp常见xhtml标题中访问@ManagedScoped(eager=true) bean,转换为@Named,但它有点难看。

2 个答案:

答案 0 :(得分:4)

使用DeltaSpike的JSF应用程序的最佳解决方案如下:

@ApplicationScoped
public class MyBean
{
    public void init(@Observes PostConstructApplicationEvent event)
    {
        // init here
    }
}

答案 1 :(得分:3)

OmniFaces 1.8以来,CDI兼容@Eager不仅适用于@Named @ApplicationScoped,而且适用于CDI的@SessionScoped@RequestScoped以及OmniFaces {{ 1}}。另请参阅blog entryshowcase example

您可以将其与@ViewScoped

一起使用
@Eager @ApplicationScoped

@Startup,这是import javax.enterprise.context.ApplicationScoped; import javax.inject.Named; import org.omnifaces.cdi.Eager; @Named @Eager @ApplicationScoped public class Bean { // ... } 的刻板印象:

@Eager @ApplicationScoped