Выдержка из Связь 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
бэк-бины для входа в приложение.