如何解决我的自定义 ExceptionHandler 不适用于 Ajax 请求
我不知道为什么,但是我的自定义 ExceptionHandler 可以很好地处理普通请求,但不能处理 ajax 请求中的错误。
这是我的 ExceptionHandler 的代码:
public class YourExceptionHandler extends ExceptionHandlerWrapper {
private ExceptionHandler wrapped;
private Logger logger = Logger.getLogger(YourExceptionHandler.class.getName());
public YourExceptionHandler(ExceptionHandler wrapped) {
this.wrapped = wrapped;
}
@Override
public void handle() throws FacesException {
String errorPage = PageUtil.error;
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext externalContext = context.getExternalContext();
HttpSession session = (HttpSession) externalContext.getSession(false);
HttpServletRequest req = (HttpServletRequest) externalContext.getRequest();
String uri = req.getRequestURI();
boolean ok = true;
boolean logged = true;
boolean loginPage = uri.endsWith("/login.xhtml");
if (! loginPage) {
if (session == null) {
logged = false;
}
else {
User user = (User ) session.getAttribute("user");
if (user == null) {
logged = false;
}
}
}
if (logged) {
Iterable<ExceptionQueuedEvent> queue = getUnhandledExceptionQueuedEvents();
ExceptionQueuedEvent exceptionEvent;
ExceptionQueuedEventContext exceptionEventContext;
Throwable e;
for (Iterator<ExceptionQueuedEvent> iterator = queue.iterator(); iterator.hasNext();) {
try {
exceptionEvent = iterator.next();
exceptionEventContext = exceptionEvent.getContext();
e = exceptionEventContext.getException();
logger.error("Uncatched exception:\n" + ExceptionUtil.getStackTrace(e));
ok = false;
}
finally {
iterator.remove();
}
}
}
else {
errorPage = "/session_error.jsf";
}
if (! ok || ! logged) {
JsfUtil.renderPage(errorPage,context);
}
this.getWrapped().handle();
}
@Override
public ExceptionHandler getWrapped() {
return wrapped;
}
}
JsfUtil.renderPage()
的代码:
public static void renderPage(String page,FacesContext context) {
Application app = context.getApplication();
ViewHandler viewHandler = app.getViewHandler();
UIViewRoot root = viewHandler.createView(context,page);
context.setViewRoot(root);
PartialViewContext partialViewContext = context.getPartialViewContext();
partialViewContext.setRenderAll(true);
context.renderResponse();
}
JS 控制台没有显示任何内容。请求的 Http 状态码为 200...
我使用的是 PrimeFaces 3.4.1
我已经在 ExceptionHandler 中设置了一个断点并等待会话超时。代码被正确执行,它根本不起作用,尽管我在 SO 上看到很多答案都说相反:(
我能做什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。