Quando usare f: viewAction / preRenderView contro PostConstruct?

Quando si dovrebbe utilizzare l’evento f:viewAction o preRenderView per inizializzare i dati per una pagina rispetto all’utilizzo dell’annotazione @PostConstruct ? La logica è l’utilizzo dell’uno o dell’altro in base al tipo di scope del backing bean, ad esempio se il backing bean è @RequestScoped , quindi si sceglierebbe di usare f:viewAction o preRenderView su @PostConstruct per inizializzare il backing bean prima del rendering il punto di vista è irrilevante in quanto i due comporterebbero lo stesso effetto?

f: viewAction o preRenderView

    
    

o

@PostConstruct

 public class MyBean { @PostConstruct public void initialize() { } } 

Quando si dovrebbe usare l’evento f: viewAction o preRenderView per inizializzare i dati per i versetti di una pagina usando l’annotazione @PostConstruct?

Usa quando vuoi eseguire un metodo prima che l’HTML sia stato reso. Ciò è particolarmente utile se si desidera eseguire azioni in base ai valori del modello impostati da durante la fase dei valori del modello di aggiornamento. Ovvero, non sono disponibili al momento @PostConstruct . In JSF 2.0 / 2.1, questo tag non esisteva e devi utilizzare la soluzione alternativa a preRenderView .

Se il backing bean è @RequestScoped, fanno esattamente la stessa cosa? (e quindi spetta alla scelta degli sviluppatori? (@PostConstruct sembra “più pulito”).

No, sicuramente non fanno la stessa cosa in modo efficace. @PostConstruct è @PostConstruct per eseguire azioni direttamente dopo la costruzione e l’impostazione di tutte le dipendenze e le proprietà gestite come @EJB , @Inject , @ManagedProperty e così via. In particolare, le dipendenze iniettate non sono disponibili all’interno del costruttore del bean. Questo verrà quindi eseguito una sola volta per vista, sessione o applicazione quando il bean è a vista, sessione o ambito dell’applicazione. è di default invocato solo sulla richiesta GET iniziale, ma può essere onPostback="true" tramite onPostback="true" per essere invocato anche sulle richieste postback. L’evento preRenderView è invocato su ogni richiesta HTTP (sì, questo include anche richieste Ajax!).

Riepilogato, utilizzare @PostConstruct se si desidera eseguire azioni su dipendenze iniettate e proprietà gestite impostate da @EJB , @Inject , @ManagedProperty , ecc. Durante la costruzione del bean. Usa se vuoi anche eseguire azioni sulle proprietà impostate da . Se sei ancora su JSF 2.0 / 2.1, usa preRenderView invece di . Se necessario, è ansible aggiungere un controllo su FacesContext#isPostback() per eseguire l’azione preRenderView solo sulla richiesta iniziale.

Guarda anche:

  • Per cosa possono essere usati , e ?
  • ViewParam vs @ManagedProperty (value = “# {param.id}”)
  • È ansible disabilitare f: event type = listener “preRenderView” sul postback?

Hai bisogno di inizializzare le proprietà del bean gestito? -> Quindi, usa @ PostConstruct Altrimenti, hai bisogno di lavorare con i parametri passati da un’altra vista? -> Quindi, utilizzare ” preRenderView