Rya*_*yan 16 navigation jsf redirect jsf-2
似乎以下是等价的:
FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation("/index.xhtml?faces-redirect=true");
FacesContext.getCurrentInstance().getExternalContext().redirect("/testapp/faces/index.xhtml");
Run Code Online (Sandbox Code Playgroud)
是否有任何差异,何时应该使用?
Bal*_*usC 16
使用该NavigationHandler#handleNavigation()
方法,您依赖于已实现的导航处理程序.您或第三方可以轻松地在webapp中覆盖/提供此功能.如果你想要更细粒度的控制,这可能是有利的,但如果你不想有外部可控制的影响,这可能是一种不利因素.使用某些URL和/或参数可能会导致不同的导航行为.
该ExternalContext#redirect()
立即向幕后的代表HttpServletResponse#sendRedirect()
,而不涉及任何导航处理程序.因此,当使用导航处理程序可能是不利的时,这可能是一个优势.但缺点是它不处理隐式导航,也没有考虑定义的导航情况.
总而言之,这取决于:)如果你只想要一个完整的和重点指向,请使用ExternalContext#redirect()
.如果您想按结果导航而不是URL,请使用NavigationHandler#handleNavigation()
.