我们有一个带有Primefaces 4.0和CAS Single Sign On的JSF webapp。
当用户在另一个选项卡中因为SSOut而丢失了会话后,请求ajax操作(通过单击p:commandButton或具有ajax = true的类似组件),没有任何反应,不会触发服务器或操作的响应。 我们需要管理这种情况,通过显示对话框或将他重定向到家或自定义页面来通知用户他的会话不再可用,但我们不知道如何。
ajax = false解决了问题,但这不是我们想要做的。
不会抛出ViewExpiredException。
编辑: 我们已经阅读并尝试this BalusC's solution但没有成功。抛出异常并且Handler无所事事。请注意,不是过期会话或由TimeOut会话无效,只是由另一个标签中的Cas Sign Out引起的显式session.invalidate。
我们还尝试了javascript jsf.ajax.addOnError()解决方案,并且再次没有捕获。 只有p:ajaxStatus onError事件会捕获一些内容,但无法识别该特定错误。即使重写ajaxStatus javascript函数,错误数据参数也是未定义的... 此外,p:log表示"请求返回错误:错误。"但是,哪个错误呢?我们如何识别它? 我们坚持这个问题......
答案 0 :(得分:2)
这已经多次讨论过了,据我所知,还没有任何开箱即用的解决方案。一种解决方案是添加this post中所述的自定义ExceptionHandler
。
另一种选择是使用jsf.ajax.addOnError(...)
注册客户端错误处理程序,并在其中处理此异常。您可能需要一些服务器代码来添加自定义标头,以防会话无效,您可以在错误处理程序中使用它来区分该特定情况与其他错误。