Reemplazo de @ManagedBean (ansioso = verdadero) en JSF22
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.
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 {
// ...
}