Sostituzione @Managedbean (desideroso= true) in JSF22
Domanda
Sto cercando una soluzione per sostituire l'annotazione @ManagedBean(eager=true)
in JSF 2.2.
Ho preso una buona nota di proposte come che consente L'esecuzione del codice all'avvio dell'applicazione si avvia.
Ho bisogno tuttavia di accedere al FacesContext
, quindi questa soluzione non funziona: FacesContext.getCurrentInstance()
è ancora NULL in questo momento.
Ho provato a trovare alternative a AfterDeploymentValidation
in SPI, ma non ho trovato nulla.
Mentre gli sviluppatori di Deltaspike non sembrano pianificare di implementare una sostituzione a @ManagedBean(eager=true)
E come omefaces non supporta ancora questo tipo di soluzione, Vedi . Sto inviando un messaggio in una bottiglia.
Per il momento, accedo solo al fagiolo @ManagedScoped(eager=true)
, trasformato in un @Named
, nella mia intestazione XHTML comune WebApp, ma è un po 'brutto.
Soluzione
La soluzione migliore per un'applicazione JSF con DeltaSpike è la seguente:
@ApplicationScoped
public class MyBean
{
public void init(@Observes PostConstructApplicationEvent event)
{
// init here
}
}
. Altri suggerimenti
Dal momento che onnifaces 1.8, c'è un CDI compatibile @Eager
che non funziona solo su @Named @ApplicationScoped
, ma ALS su @SessionScoped
Gcode di CDI e @RequestScoped
@ViewScoped
.Vedi anche il Iscrizione del blog e showcase Esempio .
Puoi 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
, che è uno stereotipoPer @Eager @ApplicationScoped
:
import javax.inject.Named;
import org.omnifaces.cdi.Startup;
@Named
@Startup
public class Bean {
// ...
}
.