Quand utiliser NavigationHandler.handleNavigation vs ExternalContext.rediriger/expédition
Il semblerait que les conditions suivantes sont équivalentes:
FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation("/index.xhtml?faces-redirect=true");
FacesContext.getCurrentInstance().getExternalContext().redirect("/testapp/faces/index.xhtml");
Est-il des différences et quand chacun doit-il être utilisé?
OriginalL'auteur Ryan | 2011-06-08
Vous devez vous connecter pour publier un commentaire.
Avec le
NavigationHandler#handleNavigation()
approche, vous êtes dépendante de la mise en œuvre de la navigation des gestionnaires. Vous ou un 3ème partie pourrait facilement overridde/offre ce dans la webapp. Cela peut être avantageux si vous voulez plus de précision, de contrôle, mais cela peut être disadvantagrous si vous ne voulez pas avoir externes influences contrôlables. À l'aide de certaines Url et/ou les paramètres pourrait potentiellement aboutir à un autre comportement de navigation.La
ExternalContext#redirect()
délégués sous les couvertures immédiatement àHttpServletResponse#sendRedirect()
, sans la participation de toute la navigation handler. De sorte que peut être un avantage lors de l'utilisation de la navigation handler est désavantageux. Mais l'inconvénient est qu'il ne gère pas les implicites de navigation ne prend pas défini de navigation les cas en compte.Dans l'ensemble, ça dépend 🙂 Si vous voulez juste une fullworthy et de la redirection, l'utilisation de la
ExternalContext#redirect()
. Si vous voulez naviguer par un résultat au lieu d'une URL, utilisezNavigationHandler#handleNavigation()
.Voir aussi:
Oui, c'est ce que je voulais dire avec des "résultats".
Pour d'autres, la lecture de ce post: une autre API différence de niveau est la ExternalContext approche jette un checked exception (IOException) et le NavigationHandler approche ne fonctionne pas.
Qui vous n'avez pas nécessairement besoin de gérer. C'est irrémédiable de toute façon (par exemple connection reset by peer). Juste ajouter
throws IOException
à la méthode dans laquelle vous appelezExternalContext#redirect()
et laissez JSF/webbrowser gérer par lui-même.OriginalL'auteur BalusC