如何在 JSF 2 中处理会话过期和 ViewExpiredException?
Posted
技术标签:
【中文标题】如何在 JSF 2 中处理会话过期和 ViewExpiredException?【英文标题】:How to handle session expiration and ViewExpiredException in JSF 2? 【发布时间】:2011-06-26 22:11:30 【问题描述】:考虑以下情况。 在会话超时(过期)后,我正在单击 JSF 表单的提交按钮。 浏览器显示一些异常消息:
ViewExpiredException:无法恢复视图上下文
我想要做的是,在会话过期后自动重定向到网站的主页。这样做的机制是什么?任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:要在 HTTP 会话已过期且 JSF 视图状态保存方法设置为 server
时在页面上调用同步 POST 请求时处理异常,请将 <error-page>
添加到 web.xml
捕获 JSF ViewExpiredException
并显示主页。
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/home.xhtml</location>
</error-page>
要同时处理异步 (ajax) 请求的异常,您需要实现自定义 ExceptionHandler
,如 Session timeout and ViewExpiredException handling on JSF/PrimeFaces ajax request 中所回答的那样
另见:
javax.faces.application.ViewExpiredException: View could not be restored【讨论】:
谢谢@BalusC 我在 web.xml 文件中添加了这样的条目<error-page> <exception-type>javax.faces.application.ViewExpiredException</exception-type> <location>/index.xhtml</location> </error-page>
我仍然从 glassfish 服务器得到异常。 HTTP Status 500 - **type** Exception report **message** **description** The server encountered an internal error () that prevented it from fulfilling this request. **exception** javax.faces.application.ViewExpiredException: viewId:/home.xhtml - View /home.xhtml could not be restored
有什么建议吗?
否 @BalusC 我在 web.xml 文件中没有其他错误页面。我已将欢迎文件和错误页面都配置为相同。(index.xhtml)。那会是个问题吗?我应该将此作为一个单独的问题提出来发布有关此的更多信息吗?
您好 BalusC,有一个小问题。它应该是 FacesServlet
映射到 /faces/*
而不是 *.xhtml
出于某种原因。只需相应地更改它以摆脱丑陋的附加 /faces
路径。这个小配置问题与这里提出的具体问题完全无关。
在meta标签中使用content属性是一个常见问题的简单优雅的解决方案。以上是关于如何在 JSF 2 中处理会话过期和 ViewExpiredException?的主要内容,如果未能解决你的问题,请参考以下文章
JSF 2.0 在整个会话中从浏览器和以编程方式设置区域设置 [重复]
如何使用 spring-security 和 jQuery 处理过期会话?