似乎以下内容是等效的:
FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation("/index.xhtml?faces-redirect=true");
FacesContext.getCurrentInstance().getExternalContext().redirect("/testapp/faces/index.xhtml");
是否有任何差异,何时应该使用?
答案 0 :(得分:16)
使用NavigationHandler#handleNavigation()
方法,您依赖于已实现的导航处理程序。您或第三方可以轻松地在webapp中覆盖/提供此功能。如果你想要更细粒度的控制,这可能是有利的,但如果你不想有外部可控制的影响,这可能是一种不利因素。使用某些URL和/或参数可能会导致不同的导航行为。
ExternalContext#redirect()
代表直接向HttpServletResponse#sendRedirect()
提供代理,不涉及任何导航处理程序。因此,当使用导航处理程序可能是不利的时,这可能是一个优势。但缺点是它不处理隐式导航,也没有考虑定义的导航案例。
总而言之,这取决于:)如果您只想要一个完整且重要的重定向,请使用ExternalContext#redirect()
。如果您想按结果而不是网址导航,请使用NavigationHandler#handleNavigation()
。