Как решить исключение ViewExpiredException в JSF 1.2 - PullRequest
4 голосов
/ 29 ноября 2011

У меня есть приложение, использующее JSF1.2 + Richfaces 3.3.3 Final, MyFaces 1.2.7, Spring + Hibernate, и я получаю следующее исключение каждый раз, когда очищаю кеш и куки браузера и снова захожу в свое приложение.

javax.faces.application.ViewExpiredException - /app/project/index.jsf
Не удалось найти сохраненное состояние представления для идентификатора представления: /app/project/index.jsf

Может кто-нибудь дать мне знать, как решить вышеуказанное исключение?

1 Ответ

9 голосов
/ 29 ноября 2011

Вы можете решить эту проблему, установив метод сохранения состояния на 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>

Это не исключение, но, по крайней мере, дает вам возможность сообщить на странице ошибки конечному пользователю о проблеме икакие действия должен предпринять конечный пользователь.Вы могли бы даже позволить странице ошибки указывать на страницу входа в систему и условно отображать сообщение о том, почему конечный пользователь снова сталкивается со страницей входа.

См. Также:

...