Ersetzen von @ManagedBean(eager=true) in JSF22
Frage
Ich suche nach einer Lösung, um das zu ersetzen @ManagedBean(eager=true)
Anmerkung in JSF 2.2.
Ich habe die Vorschläge aufmerksam zur Kenntnis genommen wie zum Beispiel die die Ausführung von Code beim Start der Anwendung ermöglichen.
Ich muss jedoch darauf zugreifen FacesContext
, daher funktioniert diese Lösung nicht: FacesContext.getCurrentInstance()
ist derzeit noch null.
Ich habe versucht, Alternativen zu finden AfterDeploymentValidation
in SPI, aber nichts gefunden.
Denn die Entwickler von DeltaSpike planen offenbar nicht, einen Ersatz zu implementieren @ManagedBean(eager=true)
und da OmiFaces diese Art von Lösung noch nicht unterstützt, sehen.Ich sende eine Flaschenpost.
Im Moment greife ich einfach auf die zu @ManagedScoped(eager=true)
Bohne, verwandelt in eine @Named
, in meinem Webapp-Common-XHTML-Header, aber es ist irgendwie hässlich.
Lösung
Die beste Lösung für eine JSF-Anwendung mit DeltaSpike ist die folgende:
@ApplicationScoped
public class MyBean
{
public void init(@Observes PostConstructApplicationEvent event)
{
// init here
}
}
Andere Tipps
Seit OmniFaces 1.8, es gibt eine CDI-kompatible @Eager
was nicht nur funktioniert @Named @ApplicationScoped
, aber auch auf CDI's @SessionScoped
Und @RequestScoped
und OmniFaces @ViewScoped
.Siehe auch die Blog-Eintrag und das Vorzeigebeispiel.
Sie können es entweder mit verwenden @Eager @ApplicationScoped
:
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import org.omnifaces.cdi.Eager;
@Named
@Eager
@ApplicationScoped
public class Bean {
// ...
}
oder mit @Startup
, was ein Stereotyp für ist @Eager @ApplicationScoped
:
import javax.inject.Named;
import org.omnifaces.cdi.Startup;
@Named
@Startup
public class Bean {
// ...
}