ExternalContext.dispatch()无法正常工作

sha*_*hdr 4 primefaces jsf-2

在p:ajax调用上,侦听器调用包含以下内容的方法

     FacesContext.getCurrentInstance().getExternalContext().dispatch("/uri.jsf");  
Run Code Online (Sandbox Code Playgroud)

不起作用。我已经在行上设置了一个断点,它在执行时保持在同一点。它并没有前进,我必须重新启动服务器以再次运行该应用程序。

    FacesContext.getCurrentInstance().getExternalContext().redirect("/uri.jsf");
Run Code Online (Sandbox Code Playgroud)

重定向工作正常。但是我想要转发的页面向前导航到另一个页面。

Bal*_*usC 5

ExternalContext#dispatch()不支持Ajax请求。它使JSF呈现给定资源的HTML输出,而JavaScript ajax引擎无法理解该HTML输出。ajax请求必须返回一个特殊的XML响应,JavaScript ajax引擎可以理解该响应。

ExternalContext#redirect()支持AJAX请求。它将自动返回一个特殊的XML响应,指示JavaScript ajax引擎调用window.location给定URL上的调用(您可以在此答案中找到一个XML示例)。

您有2个选择:

  1. 使其成为非ajax请求。
  2. 执行正常的JSF导航。

发出非ajax请求很可能不是的选择<p:ajax>。在这种情况下,执行常规导航实际上是您唯一的选择。

FacesContext context = FacesContext.getCurrentInstance();
context.getApplication().getNavigationHandler().handleNavigation(context, null, "/uri.jsf");
Run Code Online (Sandbox Code Playgroud)

在ajax请求的情况下,它将自动render="@all"用新内容强制使用an 。