我发现本文对于非ajax请求How to handle session expiration and ViewExpiredException in JSF 2?很有用
但是当我使用AJAX调用提交时无法使用此功能。
假设在primefaces对话框中,我正在使用AJAX发出发布请求,并且 session 已经超时。
我看到页面卡住了。
如何解决这种情况,以便在我使用AJAX进行发布时,可以将他重定向到我的 View 过期页面,并
然后将他转发到类似于上面链接中的解决方案的登录页面?
JSF2 / Primefaces /玻璃鱼
最佳答案
默认情况下,ajax请求期间引发的异常在客户端完全没有反馈。仅当在项目阶段设置为Development
的情况下运行Mojarra并使用<f:ajax>
时,您才会获得带有异常类型和消息的纯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,演示here演示)。也可以看看: