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

前端之家收集整理的这篇文章主要介绍了会话超时和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?

猜你在找的Ajax相关文章