我正在寻找一个解决方案来替换 @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 {
    // ...
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top