我正在研究使用omnifaces的JSF应用程序。我通过扩展FullAjaxExceptionHandler并覆盖shouldHandleExceptionRootCause()来为所有ajax请求提供自定义异常处理程序类。在这里,我将业务错误添加到上下文中,我必须在xhtml页面中显示这些消息。 ajax调用是使用p:commandButton从客户端调用的。 但是我在自定义异常处理程序中在上下文中设置的值没有显示在xhtml页面上。
public class CustomExceptionHandler extends FullAjaxExceptionHandler {
@Override
protected boolean shouldHandleExceptionRootCause(FacesContext context, Throwable exception) {
context.addMessage(null, FacesMessage);
context.getApplication().getNavigationHandler().handleNavigation(context, null, null);
context.getPartialViewContext().setRenderAll(true);
context.renderResponse();
setRequest(request, baseRunTimeException);
return false;
}
}
但是我在上下文中添加的消息没有显示在p:messages标签
中如果这种方法有任何问题,请告诉我?
答案 0 :(得分:0)
根据评论中的功能要求,
我不想将所有异常显示为消息,其中一些我将重定向到另一个错误页面。
如果你想转发(不是重定向)到错误页面,只需让shouldHandleExceptionRootCause()
方法返回true
并以web.xml
方式注册这些错误页面。< / p>
在那些您想要显示为面部消息的消息上,只需添加所需的面部消息,然后返回false
。
以下示例假设您希望将示例性自定义com.example.SystemException
的消息显示为面部消息。
@Override
protected boolean shouldHandleExceptionRootCause(FacesContext context, Throwable exception) {
if (exception instanceof SystemException) {
Messages.addGlobalError(exception.getMessage());
return false; // Don't show error page, just stay in same page.
}
return true; // Show error page as usual for other exceptions.
}