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.

War es hilfreich?

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 {
    // ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top