用于正常AND ajax请求的异常处理程序,用于记录目的

时间:2015-02-03 15:39:49

标签: ajax jsf-2 exception-handling

有人可以给我一个ExceptionHandler的工作示例,其中{strong>正常和ajax请求扩展ExceptionHandlerWrapper。我不想使用过滤器。我希望我的所有异常处理都在一个入口处进行记录。

在Omnifaces中,我们为ajax请求提供FullAjaxExceptionHandler。如何重构此类以便考虑这两种类型的请求?

2 个答案:

答案 0 :(得分:1)

为了在CustomExceptionHandler中呈现错误页面,我在实用程序方法中使用了一个标识请求类型的语句(normal或ajax)

if (context.getPartialViewContext().isAjaxRequest()) {
      ViewHandler viewHandler = context.getApplication().getViewHandler();
      UIViewRoot viewRoot = viewHandler.createView(context, errorPageLocation);
      context.setViewRoot(viewRoot);
      context.getPartialViewContext().setRenderAll(true);
      context.renderResponse();
} else {
      NavigationHandler nav = context.getApplication().getNavigationHandler();
      nav.handleNavigation(context, null, errorPageLocation);
      context.renderResponse();
}

通过这种方式,我可以在CustomExceptionHandler

中有效地处理这两个请求

答案 1 :(得分:0)

如果要检测请求的类型,可以使用Wrapper:

context == null || !context.getPartialViewContext().isAjaxRequest()

还建议您将WrapperHandler与Deltaspike Exception Control

集成

最后一种常用的重定向方式(适用于两种类型的请求):

public static void redirect(FacesContext fc, String view) {
    ExternalContext ec = fc.getExternalContext();
    String path = ec.encodeResourceURL(fc.getApplication().getViewHandler().getActionURL(fc, view));
    try {
        ec.redirect(path);
    } catch(Exception e) {
        throw new RuntimeException();
    }
}