但是当我使用AJAX调用提交时无法使用此功能
假设在一个primefaces对话框中,我正在使用AJAX发出发布请求,并且会话已经超时。我看到页面卡住了。
如何解决这种情况,以便在我使用AJAX发布时,可以将他重定向到我的视图过期页面,然后将他转发到登录页面,类似于上面的链接中的解决方案?
JSF2 / Primefaces /玻璃鱼
默认情况下,ajax请求期间引发的异常在客户端完全没有反馈。仅当在项目阶段设置为Development并使用的情况下运行Mojarra时<f:ajax>,您才会获得带有异常类型和消息的纯JavaScript警报。但是除此之外,在PrimeFaces中,默认情况下根本没有反馈。但是,您可以在服务器日志和ajax响应中(在Webbrowser的开发人员工具集的“网络”部分中)看到异常。
Development
<f:ajax>
您需要实现一个自定义ExceptionHandler,该自定义ViewExpiredException在队列中存在时基本上完成以下工作:
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出于这样的目的(源代码在这里,展示演示在这里)。
FullAjaxExceptionHandler