在 JSF22 中替换 @ManagedBean(eager=true)
题
我正在寻找一个解决方案来替换 @ManagedBean(eager=true)
JSF 2.2 中的注释。
我认真记录了建议 例如 允许在应用程序启动时执行代码。
但是我需要访问 FacesContext
, ,所以这个解决方案不起作用: FacesContext.getCurrentInstance()
此时仍然为空。
我试图寻找替代品 AfterDeploymentValidation
在SPI中,但什么也没找到。
由于 DeltaSpike 的开发者似乎并不打算实施替代品 @ManagedBean(eager=true)
由于 OmiFaces 尚不支持这种解决方案, 看. 。我正在用瓶子发送一条消息。
目前,我只是访问 @ManagedScoped(eager=true)
豆子,转变为 @Named
, ,在我的 webapp 中常见的 xhtml 标头,但它有点丑陋。
解决方案
使用 DeltaSpike 的 JSF 应用程序的最佳解决方案如下:
@ApplicationScoped
public class MyBean
{
public void init(@Observes PostConstructApplicationEvent event)
{
// init here
}
}
其他提示
自从 OmniFaces 1.8,有一个CDI兼容 @Eager
这不仅适用于 @Named @ApplicationScoped
, ,但也适用于 CDI @SessionScoped
和 @RequestScoped
和 OmniFaces @ViewScoped
. 。另请参阅 博客条目 和 展示示例.
您可以使用它 @Eager @ApplicationScoped
:
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import org.omnifaces.cdi.Eager;
@Named
@Eager
@ApplicationScoped
public class Bean {
// ...
}
或与 @Startup
, ,这是一个刻板印象 @Eager @ApplicationScoped
:
import javax.inject.Named;
import org.omnifaces.cdi.Startup;
@Named
@Startup
public class Bean {
// ...
}
不隶属于 StackOverflow