Tomcat 7.0.19 и Mojarra 2.1.2 ViewExpiredException - PullRequest
2 голосов
/ 14 августа 2011

Я давно использовал Tomcat 6.0.26 для своего проекта.Теперь мне нужно использовать EL 2.2 в этом проекте, поэтому я переместил его в Tomcat 7.0.19 без каких-либо других изменений (используя Mojarra 2.1.2-b04 с RichFaces 4.0.0).Когда я его запускаю, все в порядке, пока я не попробую любой a4j: commandButton или h: commandButton, он выдаст исключение ViewExpiredException, даже если приложение запускается менее минуты (для информации, я принудительно установил тайм-аут 30 минут в web.xml).

Единственное, что заставляет приложение работать, это изменение этого параметра:

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

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

Редактировать: похоже на исправление server to client проблема ViewExpiredException , но функция входа пользователя на веб-сайт больше не работает.Он входит в домашнюю страницу пользователя, но после нажатия на любую ссылку он делает то же самое, что пользователь не является регистратором (я использую SessionScoped ManagedBean для хранения информации о пользователе).

Любой имеетэтот баг?

Спасибо,

Алекс.

1 Ответ

2 голосов
/ 15 августа 2011

Вы получите ViewExpiredException, когда представление больше не будет в сеансе.Описанные симптомы свидетельствуют о том, что cookie-файл сеанса не поддерживается, и, таким образом, каждый запрос каким-то образом вынуждает сервер создать новый сеанс.

Я не могу воспроизвести вашу проблему локально на базовом проекте Mojarra 2.1.2, нацеленномна Tomcat 7.0.19.Сеанс поддерживается отлично.Я вижу заголовок ответа Set-Cookie для JSESSIONID в первом запросе и заголовок запроса Cookie для JSESSIONID в каждом последующем запросе в том же сеансе браузера.Вот как это должно работать.Таким образом, проблема, по крайней мере, напрямую не связана с Mojarra 2.1.2 или Tomcat 7.0.19.

Вы можете использовать Firebug, чтобы самостоятельно просмотреть и отследить файл cookie JSESSIONID.Это первое, что я бы сделал.Вы должны проверить, является ли браузер тем, кто отказывается отправлять заголовок запроса Cookie обратно (я не думаю, что это так), или что именно сервер отправляет новый заголовок ответа Set-cookie каждый раз (я думаю, чтоВ этом случае).Если это действительно сервер, который заново создает сеанс каждый раз, даже если браузер отправил заголовок Cookie, то это может означать только, что где-то в базе кода есть неправильный вызов HttpSession#invalidate(), который вызывает это.Запустите отладчик, чтобы выявить виновника.

...