jsf中的异常处理-在新页面中打印错误消息
我只想在出现异常时在错误页上打印一条自定义消息 我试过这个jsf中的异常处理-在新页面中打印错误消息,jsf,jsf-2,Jsf,Jsf 2,我只想在出现异常时在错误页上打印一条自定义消息 我试过这个 if(erroroccured){ FacesMessage message=new FacesMessage("You must login to continue"); context.addMessage(null, message); FacesContext.getCurrentInstance().getExternalContext().redirect("error
if(erroroccured){
FacesMessage message=new FacesMessage("You must login to continue");
context.addMessage(null, message);
FacesContext.getCurrentInstance().getExternalContext().redirect("error.xhtml");
}
在error.xhtml中,我给出了
<h:messages></h:messages>
标签也是。。每当发生异常时,我的页面就会被完全重定向。但我不能得到任何错误消息 面消息是请求范围的。重定向基本上指示webbrowser发送一个全新的HTTP请求(这也是您在浏览器地址栏中看到URL被更改的原因)。在上一个请求中设置的faces消息当然在新请求中不再可用 有几种方法可以让它工作:
ExternalContext#dispatch()
或者,如果您已经在操作方法中,则只需以常规方式导航即可
return "error";
您必须登录才能继续。
然后您可以重定向到这个特定的错误页面,如soredirect(“error login.xhtml”)
redirect(“error.xhtml?type=login”)
,并让视图处理它
externalContext.getFlash().setKeepMessages(true);
然而,Mojarra的flash范围实现有点缺陷。在当前版本中,当您需要重定向到其他文件夹时,这将不起作用,但当目标页面位于同一文件夹中时,它将起作用可能重复:不,不是,这个问题涉及验证错误MSG,我问的是异常处理,我需要重定向到另一个页面来打印我的自定义消息。但在这个问题上没有重定向。。。我可以在同一页中打印验证消息。。问题似乎主要存在于重定向中。现在一切正常,但这个例外怎么办
无法在响应提交后调用sendRedirect()
。显然,调用链中较低的其他一些代码也在调用sendRedirect()
(或externalContext.redirect()
,这是在幕后委托给非常相同的方法)。你需要跳过那个电话。有关提示,请参见此相关答案:
externalContext.getFlash().setKeepMessages(true);