有人可以给我一个ExceptionHandler
的工作示例,其中{strong>正常和ajax请求扩展ExceptionHandlerWrapper
。我不想使用过滤器。我希望我的所有异常处理都在一个入口处进行记录。
在Omnifaces中,我们为ajax请求提供FullAjaxExceptionHandler
但仅。如何重构此类以便考虑这两种类型的请求?
答案 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();
}
}