jsf - 如何解决 JSF 1.2 中的 ViewExpiredException

标签 jsf viewexpiredexception

我有一个使用 JSF1.2 + Richfaces 3.3.3 Final、MyFaces 1.2.7、Spring + Hibernate 的应用程序,每次清除浏览器的缓存和 cookie 并再次登录我的应用程序时,都会出现以下异常。

javax.faces.application.ViewExpiredException - /app/project/index.jsf
No saved view state could be found for the view identifier: /app/project/index.jsf

有人可以告诉我如何解决上述异常吗?

最佳答案

您可以通过将状态保存方法设置为客户端而不是服务器来解决此问题,以便将 View 存储(当然以序列化形式)在隐藏的输入字段中POST 形式的,而不是在服务器端的 session 中(这又被 JSESSIONID cookie 引用;所以当你删除 session cookie 或者当 session 被删除时,所有 View 基本上都会丢失过期)。您可以通过将以下上下文参数添加到 web.xml 来实现此目的:

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>

如果由于某种原因上述内容不是一个选项,那么您能做的最好的事情就是将其作为 web.xml 中的错误页面轻轻处理,如下所示:

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/errors/sessionexpired.jsf</location>
</error-page>

这并不能解决异常,但它至少为您提供了在错误页面中告诉最终用户有关问题以及最终用户必须采取哪些操作的机会。您甚至可以让错误页面指向登录页面,并有条件地呈现一些有关最终用户为何再次面对登录页面的消息。

另请参阅:

关于jsf - 如何解决 JSF 1.2 中的 ViewExpiredException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315617/

相关文章:

jsf - 当状态保存方法设置为客户端且用户 session 有效时,在集群环境中获取ViewExpiredException

javascript - 获取网页中所有输入字段的更改的最佳方法

jsf - jsf中render和reRender属性之间的区别

css - 如何隔离 PrimeFaces Widget 不受主站点 CSS 的影响

jsf - 如何从请求作用域 bean 的 PostConstruct 方法显示 FacesMessage?

java - JSF 中的 Ajax 表单更新显示 ViewExpiredException

java - JSF:无法捕获 ViewExpiredException

java - 如何比较 2 个字符串 <c :if>?

jsf登录超时

java - 从 JSF 1.2 迁移到 JSF 2.0 后,每次导航都会出现 ViewExpiredException