Pergunta

Estou procurando uma solução para substituir o @ManagedBean(eager=true) anotação em JSF 2.2.

Tomei boa nota das propostas como que permitem a execução de código na inicialização do aplicativo.

Preciso, no entanto, acessar o FacesContext, então esta solução não funciona: FacesContext.getCurrentInstance() ainda é nulo neste momento.

Tentei encontrar alternativas para AfterDeploymentValidation no SPI, mas não encontrei nada.

Como os desenvolvedores do DeltaSpike não parecem planejar implementar uma substituição para @ManagedBean(eager=true) e como o OmiFaces ainda não suporta este tipo de solução, ver.Estou enviando uma mensagem em uma garrafa.

Por enquanto, basta acessar o @ManagedScoped(eager=true) feijão, transformado em @Named, no cabeçalho xhtml comum do meu webapp, mas é meio feio.

Foi útil?

Solução

A melhor solução para uma aplicação JSF com DeltaSpike é a seguinte:

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

Outras dicas

Desde OmniFaces 1.8, há um CDI compatível @Eager que não só funciona em @Named @ApplicationScoped, mas também em CDI's @SessionScoped e @RequestScoped e OmniFaces @ViewScoped.Veja também o entrada do blog e a exemplo de vitrine.

Você pode usá-lo com @Eager @ApplicationScoped:

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import org.omnifaces.cdi.Eager;

@Named
@Eager
@ApplicationScoped
public class Bean {
    // ...
}

ou com @Startup, o que é um estereótipo para @Eager @ApplicationScoped:

import javax.inject.Named;
import org.omnifaces.cdi.Startup;

@Named
@Startup
public class Bean {
    // ...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top