在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)
重定向工作正常。但是我想要转发的页面向前导航到另一个页面。
在ExternalContext#dispatch()
不支持Ajax请求。它使JSF呈现给定资源的HTML输出,而JavaScript ajax引擎无法理解该HTML输出。ajax请求必须返回一个特殊的XML响应,JavaScript ajax引擎可以理解该响应。
在ExternalContext#redirect()
支持AJAX请求。它将自动返回一个特殊的XML响应,指示JavaScript ajax引擎调用window.location
给定URL上的调用(您可以在此答案中找到一个XML示例)。
您有2个选择:
发出非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 。
归档时间: |
|
查看次数: |
5220 次 |
最近记录: |