我已经编写了自己的从 ExceptionHandlerWrapper 派生的 JSF 处理程序。在 handle 方法中,我有以下代码:
NavigationHandler navigationHandler = fc.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(fc, null, "error");
fc.renderResponse();
问题是在具有 primefaces 轮询元素的页面上:
<p:poll ajax="true" interval="10" widgetVar="pollPing" autoStart="false" oncomplete="remoteCommandPing()"/>
浏览器仅在“间隔”秒后才被重定向。这意味着我必须等待最多 10 秒才能被重定向。在错误处理程序中,我需要以某种方式停止对服务器的任何当前请求(在我的情况下由轮询完成)并立即重定向。我尝试在导航之前使用以下代码:
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext extCtx = fc.getExternalContext();
extCtx.responseReset();
但我得到的只是:
XML Parsing Error: no element found
意味着服务器响应为空(显然是因为 extCtx.responseReset();),之后不会重定向到错误页面。
有谁知道如何简单地停止所有请求并强制重定向到某些人脸托管页面?我尝试了各种涉及 setViewRoot 的解决方案和 OminFaces 的 FullAjaxExceptionHandler.java 中的一些代码片段,但没有任何运气。谢谢。
最佳答案
你可以用 try catch 围绕你的 java 代码,并在 catch block 中做:
FacesContext.getCurrentInstance().getExternalContext().redirect("foo.xhtml");
如果这不能回答您的问题,您可能需要提供更多代码,并尝试更好地解释您的问题
关于jsf-2 - p :poll blocks navigation to a page inside a custom ExceptionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124388/