Question

Je recherche une solution pour remplacer le @ManagedBean(eager=true) annotation dans JSF 2.2.

J'ai pris bonne note des propositions tel que qui permettent l'exécution de code au démarrage de l'application.

J'ai cependant besoin d'accéder au FacesContext, donc cette solution ne fonctionne pas : FacesContext.getCurrentInstance() est toujours nul à ce moment.

J'ai essayé de trouver des alternatives à AfterDeploymentValidation dans SPI, mais je n'ai rien trouvé.

Comme les développeurs de DeltaSpike ne semblent pas envisager de mettre en œuvre une substitution à @ManagedBean(eager=true) et comme OmiFaces ne supporte pas encore ce genre de solution, voir.J'envoie un message dans une bouteille.

Pour le moment, j'accède simplement au @ManagedScoped(eager=true) haricot, transformé en @Named, dans l'en-tête xhtml commun de mon application Web, mais c'est plutôt moche.

Était-ce utile?

La solution

La meilleure solution pour une application JSF avec DeltaSpike est la suivante :

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

Autres conseils

Depuis OmniFaces 1.8, il y a un compatible CDI @Eager qui fonctionne non seulement sur @Named @ApplicationScoped, mais aussi sur CDI @SessionScoped et @RequestScoped et OmniFaces @ViewScoped.Voir aussi le entrée de blog et le exemple de vitrine.

Vous pouvez l'utiliser soit avec @Eager @ApplicationScoped:

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

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

ou avec @Startup, ce qui est un stéréotype pour @Eager @ApplicationScoped:

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

@Named
@Startup
public class Bean {
    // ...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top