Замена @ManagedBean(eager=true) в JSF22
Вопрос
Ищу решение по замене @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 {
// ...
}