2013-09-07 3 views
0

Validating vue-paramètres événement preRenderView dans le backing bean je remarquai que chaque événement <f:event> est encore tiré, même si l'une des méthodes invoquaient une redirection en utilisant:Comment détecter si une redirection précédente a été appelée?

FacesContext.getExternalContext().redirect(url);

Si dans plusieurs événements une redirection est invoquée une exception d'erreur d'état illégal sera levée. Pour éviter cela, je voudrais savoir si et comment il est possible de détecter généralement si une redirection a déjà été invoquée et de traiter la première ou la dernière redirection.

Répondre

1

Vous pouvez utiliser le FacesContext#getRenderResponse() pour confirmer si le processus (ou l'ordre) pour passer à la phase RENDER_RESPONSE a été démarré. Ceci vérifie si la méthode renderResponse() a été appelée par un composant, indiquant à l'exécution de transférer le contrôle à la phase RENDER_RESPONSE. Généralement, à ce stade, il est dangereux de tenter de faire quoi que ce soit avec le flux de réponse.

Une autre route vers la phase RENDER_RESPONSE est la méthode FacesContext#responseComplete(). Cependant, cela ne déclenche pas directement le traitement de la réponse. Plutôt, c'est le drapeau final pour indiquer à l'exécution que RENDER_RESPONSE a été atteint.

Ainsi, pour la spécification, FacesContext#getResponseComplete() est le contrôle ultime pour vérifier l'état de la réponse

Dans certaines circonstances, il est possible que les deux renderResponse() et responseComplete() auraient été appelés pour la demande. Dans ce cas, l'implémentation JSF doit respecter l'appel responseComplete() (s'il a été effectué) avant de vérifier si renderResponse() a été appelé.

+0

Merci, cela m'a aidé à supprimer cette erreur. À propos de: 'Généralement, à ce stade, il est dangereux d'essayer de faire quoi que ce soit avec le flux de réponse.» Donc, je n'ai aucune chance d'arrêter de rediriger vers la première url pour rediriger vers la seconde URL? – djmj

Questions connexes