如何在JSF 1.2中解决ViewExpiredException

时间:2011-11-29 18:15:46

标签: jsf viewexpiredexception

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

  

javax.faces.application.ViewExpiredException - /app/project/index.jsf
  找不到视图标识符的已保存视图状态:/app/project/index.jsf

有谁能让我知道如何解决上述异常?

1 个答案:

答案 0 :(得分:9)

您可以通过将状态保存方法设置为client而不是server来解决此问题,以便在POST表单的隐藏输入字段中存储视图(当然是以序列化形式)在服务器端的会话中(由JSESSIONID cookie引用;因此当您删除会话cookie或会话到期时,所有视图基本上都会丢失)。您可以通过将以下上下文参数添加到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>

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

另见: