91 votes

Quand utiliser preRenderView contre PostConstruct?

Quand doit-on utiliser le preRenderView événement pour initialiser les données d'une page à l'aide de versets 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 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?

preRenderView Événement

<f:metadata>
  <f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>

ou

@PostConstruct

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

    }
}

115voto

BalusC Points 498232

Quand doit-on utiliser le preRenderView événement pour initialiser les données d'une page à l'aide de versets de la @PostConstruct annotation?

Utiliser l' preRenderView événement lorsque vous voulez exécuter une méthode au cours de la début de la rendre phase de réponse, juste avant le HTML est rendu. Ceci est particulièrement utile si vous souhaitez effectuer des actions fondées sur le modèle des valeurs définies par l' <f:viewParam> pendant la mise à jour du modèle de valeurs de phase. Ils sont notamment pas disponibles au moment où l' @PostConstruct s'exécute.

Si le backing bean est RequestScoped, font-ils effectivement faire exactement la même chose? (et puis, c'est au développeur de choix? (@PostConstruct semble plus "propre").

Non, ils ne certainement pas faire la même chose. L' @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. L'injection de dépendances 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. L' preRenderView événement est appelée à chaque requête HTTP (oui, cela inclut également les requêtes ajax!).

Résumé, utilisez @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. Utiliser preRenderView si vous aussi souhaitez effectuer des actions sur les propriétés définies par l' <f:viewParam>. Vous pouvez, si nécessaire, d'ajouter une case sur FacesContext#isPostback() pour effectuer l'action sur la demande initiale.

Voir aussi:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X