我正在寻找替换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
,但它有点难看。
答案 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 entry和showcase 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