但是当我使用AJAX调用提交时无法使用此功能
假设在一个primefaces对话框中,我正在使用AJAX发出发布请求,并且会话已经超时。我看到页面卡住了。
如何解决这种情况,以便在我使用AJAX发布时,可以将他重定向到我的视图过期页面,然后将他转发到登录页面,类似于上面的链接中的解决方案?
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
出于这样的目的(源代码在这里,展示演示在这里)。
是否有可能“拦截”会话超时? 我尝试了,但据我所知,当调用HttpSessionListener.session毁灭()'方法时,会话已经被摧毁。(所以我没有机会确定用户,拥有超时的会话) 另一个选项是PhaseListener,在restoreView阶段检查会话是否是“新的”。 但是,我需要在会话超时的“第二天”执行一些操作-不在以后的刷新中执行,也不在以后的登录中执行。 (背景:需要删除某些
问题内容: 无论我们是否检查会话变量,会话超时都会在每个请求上重置吗?还是我们应该使用至少一个会话变量? Ajax请求是否导致重置会话超时?像,… 谢谢 编辑1) 会导致重置会话超时吗? 问题答案: 是的,它确实。是否实际使用都没关系。 但是,如果 仅 使用ajax调用,则可能会遇到一些问题。 (虽然我还没有遇到过它自己,在这里的解释)
我在解决如何正确处理JSF中会话的自动销毁方面遇到了困难。当然,此时,容器会使会话失效,从而也会在会话范围的bean上调用@PreDestroy方法。 在某些会话范围bean的预销毁中,我们正在注销一些侦听器,如下所示: 然而,getWS()方法实际上试图获取对另一个会话范围bean的引用,但失败了,如返回null。Ryan Lubke认为,后者似乎是正常的JSF行为: 我们遵守这里的规范。我不确
问题内容: 我有一个JSF页面,不受的保护。我执行以下步骤: 在浏览器中打开JSF页面。 重新启动服务器。 单击JSF页面上的命令按钮以发起ajax调用。 Firebug 如预期的那样显示了a 的增加。 发布: 响应: 但是,一旦我将页面配置为受其保护并执行上面列出的相同步骤,(对我而言)奇怪的是,该页面不再出现。相反,响应只是一个新的视图状态。 发布: 响应: 有人可以帮我解决这个问题吗?我希望
问题内容: 这似乎是一个非常普遍的问题。但是我找不到任何可行的解决方案。我们正在使用Richafaces 4,Myfaces 2.0.5和Spring security3.0.X。 在ajax / non ajax请求的会话时间上,应该将用户重定向到登录页面。登录回去后,应该向他显示先前执行的ajax / non ajax操作。 非ajax请求不会遇到任何问题。但是对于ajax请求,不会将用户重定
问题内容: 有什么方法可以使用Angularjs管理用户会话吗? 会话超时-系统空闲时。 在会话即将到期时发出警报,并带有恢复会话的选项。 如果会话已过期,则在尝试发出请求时重定向(或其他任何操作)。 拦截器可以解决这个问题吗?你能举个例子吗? 提前致谢。 问题答案: 尝试ng-idle。它是一个简单的组件,您可以在其中设置超时和警告时间,直到达到超时。然后,您可以查询服务器上的用户注销或类似内容