小编典典

JSF / PrimeFaces Ajax请求上的会话超时和ViewExpiredException处理

ajax

但是当我使用AJAX调用提交时无法使用此功能

假设在一个primefaces对话框中,我正在使用AJAX发出发布请求,并且会话已经超时。我看到页面卡住了。

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

JSF2 / Primefaces /玻璃鱼


阅读 321

收藏
2020-07-26

共1个答案

小编典典

默认情况下,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出于这样的目的(源代码在这里,展示演示在这里)。

2020-07-26