Quand faut-il utiliser l'événement f: viewAction ou preRenderView pour initialiser les données d'un versets de page à l'aide de l'annotation @PostConstruct?
Utilisez le <f:viewAction>
lorsque vous souhaitez exécuter une méthode avant que le HTML ne soit rendu. Ceci est particulièrement utile si vous souhaitez effectuer des actions basées sur les valeurs de modèle définies par <f:viewParam>
lors de la phase de mise à jour des valeurs de modèle. A savoir, ils ne sont pas disponibles au moment des @PostConstruct
courses. Dans JSF 2.0 / 2.1, cette balise n'existait pas et vous devez utiliser la preRenderView
solution de contournement.
Si le bean de support est @RequestScoped, font-ils effectivement exactement la même chose? (et alors c'est au choix du développeur? (@PostConstruct semble "plus propre").
Non, ils ne font certainement pas la même chose efficacement. Le @PostConstruct
est onformément d'effectuer des actions directement après la construction de haricots et le réglage de toutes les dépendances injectées et les propriétés gérées telles que @EJB
, @Inject
, @ManagedProperty
, etc. A savoir, les dépendances injectées ne sont pas disponibles à l' intérieur du constructeur de la fève. Cela ne s'exécutera donc qu'une seule fois par vue, session ou application lorsque le bean a une portée vue, session ou application. Le <f:viewAction>
n'est par défaut appelé que sur la requête GET initiale, mais peut également onPostback="true"
être configuré via l' attribut pour être appelé sur les demandes de publication. L' preRenderView
événement est appelé à chaque requête HTTP (oui, cela inclut également les requêtes ajax!).
En résumé, l' utilisation @PostConstruct
si vous souhaitez effectuer des actions sur les dépendances et les propriétés gérées qui sont définies par injection @EJB
, @Inject
, @ManagedProperty
, etc. pendant la construction de haricots. À utiliser <f:viewAction>
si vous souhaitez également effectuer des actions sur les propriétés définies par <f:viewParam>
. Si vous utilisez toujours JSF 2.0 / 2.1, utilisez à la preRenderView
place de <f:viewAction>
. Vous pouvez si nécessaire ajouter une coche FacesContext#isPostback()
pour effectuer l' preRenderView
action sur demande initiale uniquement.
Voir également:
Avez-vous besoin d'initialiser les propriétés du bean géré? -> Ensuite, utilisez @ PostConstruct Sinon, avez-vous besoin de travailler avec des paramètres passés d'une autre vue? -> Ensuite, utilisez " preRenderView "
la source