Pregunta

Estoy buscando una solución para reemplazar el @ManagedBean(eager=true) anotación en JSF 2.2.

Tomé buena nota de las propuestas. como que permiten la ejecución de código al iniciar la aplicación.

Sin embargo necesito acceder al FacesContext, por lo que esta solución no funciona: FacesContext.getCurrentInstance() todavía es nulo en este momento.

Traté de encontrar alternativas a AfterDeploymentValidation en SPI, pero no encontré nada.

Como los desarrolladores de DeltaSpike no parecen planear implementar una sustitución de @ManagedBean(eager=true) y como OmiFaces aún no admite este tipo de solución, ver.Estoy enviando un mensaje en una botella.

Por el momento solo accedo al @ManagedScoped(eager=true) frijol, transformado en @Named, en el encabezado xhtml común de mi aplicación web, pero es un poco feo.

¿Fue útil?

Solución

La mejor solución para una aplicación JSF con DeltaSpike es la siguiente:

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

Otros consejos

Desde OmniFaces 1.8, hay un CDI compatible @Eager que no sólo funciona en @Named @ApplicationScoped, pero también en CDI @SessionScoped y @RequestScoped y OmniFaces @ViewScoped.Ver también el Entrada de blog y el ejemplo de escaparate.

Puedes usarlo con @Eager @ApplicationScoped:

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

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

o con @Startup, que es un estereotipo para @Eager @ApplicationScoped:

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

@Named
@Startup
public class Bean {
    // ...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top