Jsf 何时使用NavigationHandler.HandlenNavigation vs ExternalContext.redirect/dispatch
似乎以下各项是等效的:Jsf 何时使用NavigationHandler.HandlenNavigation vs ExternalContext.redirect/dispatch,jsf,redirect,jsf-2,navigation,Jsf,Redirect,Jsf 2,Navigation,似乎以下各项是等效的: FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation("/index.xhtml?faces-redirect=true"); FacesContext.getCurrentInstance().getExternalContext().redirect("/testapp/faces/index.xhtml"); 是否存在任何差异以及何时应
FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation("/index.xhtml?faces-redirect=true");
FacesContext.getCurrentInstance().getExternalContext().redirect("/testapp/faces/index.xhtml");
是否存在任何差异以及何时应使用每种方法?方法取决于实现的导航处理程序。您或第三方可以在webapp中轻松覆盖/提供此功能。如果您想要更细粒度的控制,这可能是有利的,但如果您根本不想有外部可控的影响,这可能是不利的。使用某些URL和/或参数可能会导致不同的导航行为
学员在不涉及任何导航处理程序的情况下,立即将其放在掩护下。因此,当使用导航处理程序可能是不利的时,这可能是一个优势。但缺点是它不处理隐式导航,也不考虑已定义的导航情况
总而言之,这取决于:)如果您只是想要一个完整且切中要害的重定向,请使用ExternalContext#redirect()
。如果希望通过结果而不是URL进行导航,请使用NavigationHandler\handleNavigation()
另见:
抛出IOException
添加到调用ExternalContext#redirect()
的方法中,并让JSF/webbrowser自己处理它。