会话超时和ViewExpiredException处理JSF/PrimeFaces ajax请求

我发现这篇文章是非常有用的非ajax请求 How to handle session expiration and ViewExpiredException in JSF 2?
但是当我使用AJAX调用提交时,我不能使用这个。

假设在一个primefaces对话框中,我使用AJAX发出一个post请求,session已经超时了。
我看到我的页面卡住了。

如何解决这种情况下,当我发布使用AJAX,我可以将他重定向到我的视图过期的页面和
然后转发他到登录页面类似于上面的链接的解决方案?

JSF2 / Primefaces / Glassfish

在ajax请求中抛出的异常默认情况下在客户端完全没有反馈。只有当你运行Mojarra项目阶段设置为开发并使用< f:ajax&gt ;,那么你会得到一个裸的JavaScript警报与异常类型和消息。但除此之外,在PrimeFaces中,默认情况下没有反馈。不过,您可以在服务器日志和ajax响应(在webbrowser的开发人员工具集的“网络”部分)中看到异常。 你需要实现一个自定义 ExceptionHandler,当队列中有一个ViewExpiredException时,它基本上完成以下工作:
String errorPageLocation = "/WEB-INF/errorpages/expired.xhtml";
context.setViewRoot(context.getApplication().getViewHandler().createView(context,errorPageLocation));
context.getPartialViewContext().setRenderAll(true);
context.renderResponse();

或者,您可以使用JSF实用程序库OmniFaces.它有一个FullAjaxExceptionHandler为此目的(源代码here,showcase demo here)。

也可以看看:

> Why use a JSF ExceptionHandlerFactory instead of <error-page> redirection?
> What is the correct way to deal with JSF 2.0 exceptions for AJAXified components?

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...