我发现这篇文章是非常有用的非ajax请求
How to handle session expiration and ViewExpiredException in JSF 2?
但是当我使用AJAX调用提交时,我不能使用这个。
但是当我使用AJAX调用提交时,我不能使用这个。
假设在一个primefaces对话框中,我使用AJAX发出一个post请求,session已经超时了。
我看到我的页面卡住了。
如何解决这种情况下,当我发布使用AJAX,我可以将他重定向到我的视图过期的页面和
然后转发他到登录页面类似于上面的链接的解决方案?
JSF2 / Primefaces / Glassfish
在ajax请求中抛出的异常默认情况下在客户端完全没有反馈。只有当你运行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,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?