a4j не работает после тайм-аута сеанса в jsf и управляемый bean viewscoped - PullRequest
0 голосов
/ 10 февраля 2012

Я разработал приложение, которое имеет ViewScoped и SessionScoped для управляемых bean-компонентов.Все модули, требующие входа пользователя, управляемые bean-компоненты будут находиться в SessionScoped, а страница без входа в систему - в ViewScoped.В настоящее время проблема заключается в том, что, когда время сеанса истекает, что по умолчанию составляет 30 минут, страница без регистрации ведет себя странно, когда commandButton не отправляет запрос на сервер, и это также происходит со всеми кнопками с поведением ajax дляpage.

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

Я испробовал большинство предложенных там предложений.

1 Ответ

1 голос
/ 10 февраля 2012

Выдержка из Связь BalusC в JSF 2.0

• @ ViewScoped: бин в этой области живет до тех пор, пока вы взаимодействуете с одним и тем же представлением JSF в окне / вкладке браузера. Он создается по HTTP-запросу и уничтожается при обратной передаче в другое представление. Он не сразу уничтожается, когда вы покидаете / закрываете представление с помощью запроса GET, но он больше недоступен обычным способом. JSF сохраняет компонент в UIViewRoot # getViewMap () с именем управляемого компонента в качестве ключа, который, в свою очередь, сохраняется в сеансе. Вам нужно возвращать null или void из методов action (listener), чтобы поддерживать bean-компонент. Используйте эту область для более сложных форм, которые используют ajax, таблицы данных и / или несколько визуализированных / отключенных атрибутов, состояние которых необходимо сохранить в последующих запросах в том же окне / вкладке браузера (представление).

• @ SessionScoped: бин в этой области живет до тех пор, пока живет сеанс HTTP. Он создается при первом HTTP-запросе, включающем этот компонент в сеансе, и уничтожается, когда сеанс HTTP становится недействительным (или когда вы вручную удаляете компонент из карты сеанса). JSF сохраняет компонент в качестве атрибута HttpSession с именем управляемого компонента в качестве ключа. Это также доступно ExternalContext # getSessionMap (). Используйте эту область для чистых данных в рамках сеанса, которые можно безопасно разделить между всеми окнами / вкладками (представлениями) браузера в рамках одного сеанса. Например, вошедший в систему пользователь, пользовательские настройки, такие как пользовательские настройки и выбранный язык / языковой стандарт и т. Д.

Бины

ViewScoped хранятся в UIViewRoot, который, в свою очередь, сохраняется в сеансе пользователя, таким образом, бины ViewScoped косвенно также сохраняются в сеансе. После того, как сеанс истекает и уничтожается, компоненты ViewScoped также уничтожаются, и если вы ссылаетесь на что-то в своем коде того LoginBean, который ожидает состояние, или, возможно, вы используете сторонний компонент, который требует состояние (например, a4j) ), тогда это может объяснить странность.

Я предлагаю переключиться на RequestScoped для вашего LoginBean. Я никогда не сталкивался с ситуацией, когда мне требовалось ViewScoped бэк-бины для входа в приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...