2010-03-30 2 views

Répondre

12

Si vous êtes déjà sur JSF 2.0, vous pouvez le vérifier en utilisant FacesContext#getCurrentPhaseId():

if (FacesContext.getCurrentInstance().getCurrentPhaseId() == PhaseId.RESTORE_VIEW) { 
    // Restore view called. 
} 

Mais si vous êtes encore sur 1.x JSF encore, votre meilleure station avec une PhaseListener qui écoute sur PhaseId.RESTORE_VIEW, définit un indicateur/bascule/jeton dans la portée de la demande pendant beforePhase() et supprime le pendant afterPhase(). Laissez la méthode getter du bean vérifier sa présence dans l'étendue de la requête.

Cela dit, pour quoi en avez-vous besoin exactement? Je n'ai jamais eu besoin d'une telle exigence fonctionnelle. Le constructeur du bean ou une méthode annotée @PostConstruct n'est-il pas probablement un meilleur endroit pour faire des choses d'initialisation comme ça?

+0

Im uniquement sur JSF 1.x. La raison pour laquelle je veux faire quelque chose comme ceci est que pendant la phase de restauration de la vue, une méthode est appelée sur mon bean géré que je n'ai pas besoin d'appeler et c'est particulièrement cher. Donc, je veux mettre dans la logique qui dit "Si en vue de restauration, ne faites rien". – BestPractices

+0

Avez-vous considéré l'inverse? Vérifier si vous êtes dans RENDER_RESPONSE. De cette façon, vous pouvez simplement utiliser 'if (FacesContext.getCurrentInstance(). GetRenderResponse()) {}' à la place qui est déjà disponible depuis JSF 1.0. Mais si le haricot lui-même est demandé, alors je le mettrais dans le constructeur du haricot. Sauf si le bean a trop de responsabilités, mais c'est un autre problème;) – BalusC

+0

OK-- J'ai pensé à vérifier getRenderResponse, mais je ne savais pas si cela vous dirait de façon concluante si vous étiez dans la phase RestoreView. Je vais l'essayer ... – BestPractices

Questions connexes