Quand à l'utilisation de f:viewAction / preRenderView contre PostConstruct?
Quand doit-on utiliser le f:viewAction
ou preRenderView
événement pour initialiser les données pour une page par rapport à l'aide de la @PostConstruct
annotation? C'est la logique d'utiliser l'un ou l'autre en fonction du type de champ d'application de la sauvegarde de haricot par exemple, Si le backing bean est @RequestScoped
, alors le choix d'utiliser f:viewAction
ou preRenderView
sur @PostConstruct
pour initialiser le backing bean avant le rendu de la vue, hors de propos car les deux résultat serait le même effet?
f:viewAction ou preRenderView
<f:metadata>
<f:viewAction action="#{myBean.initialize}" />
</f:metadata>
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
ou
@PostConstruct
public class MyBean
{
@PostConstruct
public void initialize()
{
}
}
Vous devez vous connecter pour publier un commentaire.
Utiliser le
<f:viewAction>
lorsque vous voulez exécuter une méthode avant le HTML est rendu. Ceci est particulièrement utile si vous souhaitez effectuer des actions basées sur des valeurs de modèle fixé par<f:viewParam>
au cours de modèle de mise à jour des valeurs de phase. À savoir, ils ne sont pas disponibles au moment où l'@PostConstruct
s'exécute. En JSF 2.0/2.1, cette balise n'existe pas, et vous devez utiliser lepreRenderView
solution de contournement.Ils n'y sont certainement pas effectivement faire la même chose. Le
@PostConstruct
est destiné à effectuer des actions directement après bean, la construction et l'installation de tous injection de dépendances et de propriétés gérées comme@EJB
,@Inject
,@ManagedProperty
, etc. À savoir, l'injection de dépendances ne sont pas disponibles à l'intérieur de la fève du constructeur. Ce sera donc exécuté qu'une seule fois par la vue, de la session ou de l'application lorsque le bean est de la vue, de la session ou application étendue. Le<f:viewAction>
est par défaut invoqué première requête GET, mais peut viaonPostback="true"
attribut être configuré de manière à être invoquée sur la publication des demandes. LepreRenderView
événement est appelée à chaque requête HTTP (oui, cela inclut également les requêtes ajax!).Résumé, l'utilisation
@PostConstruct
si vous souhaitez effectuer des actions sur l'injection de dépendances et de propriétés gérées qui sont définis par@EJB
,@Inject
,@ManagedProperty
, etc au cours de l'haricot de construction. Utilisation<f:viewAction>
si vous aussi souhaitez effectuer des actions sur les propriétés définies par<f:viewParam>
. Si vous êtes encore sur JSF 2.0/2.1, l'utilisationpreRenderView
au lieu de<f:viewAction>
. Vous pouvez, si nécessaire, d'ajouter une case surFacesContext#isPostback()
pour effectuer lepreRenderView
action sur la demande initiale seulement.Voir aussi:
Avez-vous besoin d'initialiser le managed bean propriétés? --> Ensuite, utilisez @PostConstruct
Sinon, avez-vous besoin de travailler avec des params passé de l'autre point de vue? --> Ensuite, utilisez "preRenderView"