2

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

我很好地记录了一些建议,例如允许在应用程序启动时执行代码。

但是我需要访问FacesContext,所以这个解决方案不起作用:FacesContext.getCurrentInstance()此时仍然为空。

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

由于 DeltaSpike 的开发人员似乎不打算实施替代方案,@ManagedBean(eager=true)而且 OmiFaces 还不支持这种解决方案,请参阅。我在一个瓶子里发送一条消息。

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

4

2 回答 2

4

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

@ApplicationScoped
public class MyBean
{
    public void init(@Observes PostConstructApplicationEvent event)
    {
        // init here
    }
}
于 2014-04-15T14:39:40.970 回答
3

OmniFaces 1.8 开始,有一个 CDI 兼容@Eager,它不仅适用于@Named @ApplicationScoped,而且适用于 CDI@SessionScoped@RequestScopedOmniFaces @ViewScoped。另请参阅博客条目展示示例

您可以将其用于@Eager @ApplicationScoped

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import org.omnifaces.cdi.Eager;

@Named
@Eager
@ApplicationScoped
public class Bean {
    // ...
}

或 with @Startup,这是 的刻板印象@Eager @ApplicationScoped

import javax.inject.Named;
import org.omnifaces.cdi.Startup;

@Named
@Startup
public class Bean {
    // ...
}
于 2014-06-06T08:35:13.870 回答