我有一个使用 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
谁能让我知道如何解决上述异常?
我有一个使用 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
谁能让我知道如何解决上述异常?
您可以通过将状态保存方法设置为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>
这并不能解决异常,但它至少让您有机会在错误页面中告诉最终用户问题以及最终用户必须采取的操作。您甚至可以让错误页面指向登录页面,并有条件地呈现一些关于最终用户为何再次面对登录页面的消息。