如何在JSF 1.2中解决ViewExpiredException

Kap*_*mje 4 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

任何人都可以让我知道如何解决上述异常?

Bal*_*usC 9

可以通过设置的状态保存方法解决它来client代替server,使得视图被存储(在序列化形式,当然)在POST形式的隐藏的输入字段,而不是在服务器侧的会话(其又由JSESSIONIDcookie 引用;因此当您删除会话cookie或会话到期时,所有视图基本上都会丢失).您可以通过将以下上下文参数添加到以下内容来实现web.xml:

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

如果出于某种原因上述选项不是一个选项,那么最好的办法是将其作为错误页面轻轻处理web.xml,如下所示:

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/errors/sessionexpired.jsf</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

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

也可以看看: