javax.faces.application.ViewExpiredException: не удалось восстановить представление.

У меня есть мобильное веб-приложение с одним представлением index.xhtml. Я изменяю это представление динамически только с запросом POST. В основном все мои ViewScopedBean являются SessionScopedBean. Я не знаю, является ли это лучшим решением для мобильного веб-приложения, но оно есть (динамическое обновление выглядит быстрее, чем перезагрузка новой страницы).

На локальном хосте все в порядке, даже в рабочей среде, когда я использую IP-адрес своего удаленного сервера для доступа к мобильному веб-приложению. Когда я использую доменное имя, в одном из моих динамических представлений, если что-то сделать с почтовым запросом, я получаю это исключение

  javax.faces.application.ViewExpiredException: viewId:/index2.xhtml - View /index2.xhtml could not be restored.

Я знаю, почему возникает это исключение, но я не знаю, почему срок действия моего представления истек. Где я должен искать? Я мог бы опубликовать свой код, но он действительно беспорядочный.


person Community    schedule 18.08.2015    source источник
comment
Значит, вы не понимаете, как должна работать сессия HTTP? Это объясняется и связано в stackoverflow.com/questions/3642919/   -  person BalusC    schedule 19.08.2015
comment
Ну, на самом деле я видел этот пост, тогда я перечитаю его снова. Спасибо   -  person    schedule 19.08.2015
comment
Из 1-го раздела: Итак, когда срок действия сеанса по какой-то причине истек (либо истекло время ожидания на стороне сервера или клиента, либо файл cookie сеанса по какой-то причине больше не поддерживается в браузере или путем вызова HttpSession#invalidate() на сервере), тогда состояние сериализованного представления больше недоступно в сеансе, и конечный пользователь получит это исключение. Чтобы понять работу сеанса, см. также Как работают сервлеты. ? Создание экземпляров, общие переменные и многопоточность.   -  person BalusC    schedule 19.08.2015
comment
После некоторого вашего чтения я попытался отладить себя, пожалуйста, ознакомьтесь с моим объяснением. Все равно спасибо !   -  person    schedule 19.08.2015


Ответы (1)


Ну, я нашел решение, я не уверен, почему это произошло.

В моем динамическом представлении с ошибками у меня есть url(#{prom.imageUrl}) в каком-то css. В моем случае #{prom.imageUrl} возвращает что-то вроде 167.xxx.xxx.xxx:8080/User/images/image.jpg. Итак, вот в чем дело, у меня есть сервер Apache на порту 80, который перенаправляет адрес domain.com на 167.xxx.xxx.xxx:8080/User/. Когда я захожу в это динамическое представление через 167.xxx.xxx.xxx:8080/User, все в порядке, но если я получаю доступ к представлению через domain.com, мой сеанс сбрасывается! Я предполагаю, что этот #{prom.imageUrl} вызов вызывает соединение с 167.xxx.xxx.xxx:8080/User/, и поскольку сервер считает, что это первое соединение (потому что я подключен через domain.com), он создает новый сеанс, а затем я получил исключение viewexpired. Но все это нужно подтверждать.

person Community    schedule 19.08.2015