Вопрос

Ищу решение по замене @ManagedBean(eager=true) аннотация в JSF 2.2.

Я внимательно принял к сведению предложения такой как которые позволяют выполнять код при запуске приложения.

Однако мне нужно получить доступ к FacesContext, поэтому это решение не работает: FacesContext.getCurrentInstance() в настоящее время все еще равно нулю.

Я пытался найти альтернативу AfterDeploymentValidation в SPI, но ничего не нашел.

Поскольку разработчики DeltaSpike, судя по всему, не планируют осуществлять замену @ManagedBean(eager=true) и поскольку OmiFaces еще не поддерживает такое решение, видеть.Я отправляю послание в бутылке.

На данный момент я просто получаю доступ к @ManagedScoped(eager=true) боб, превратившийся в @Named, в общем заголовке xhtml моего веб-приложения, но это некрасиво.

Это было полезно?

Решение

Лучшим решением для приложения JSF с DeltaSpike является следующее:

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

Другие советы

С OmniFaces 1.8, есть CDI-совместимый @Eager который работает не только на @Named @ApplicationScoped, но также и на CDI @SessionScoped и @RequestScoped и ОмниФейс @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