Изменение аннотации JSF с 1,2 на 2,0 - PullRequest
1 голос
/ 04 ноября 2011

Я мигрировал с 1.2 на 2.0 и переместил имена и области своих управляемых bean-компонентов из face-config.xml в bean-компоненты с помощью аннотаций.

У одного bean-компонента (sessionscoped) есть переменная экземпляра, которая получает текущийсессия как таковая: private HttpSession httpsess = (HttpSession) FacesContext.getCurrentInstance (). getExternalContext (). getSession (false);

А затем я вызываю переменную httpsess в любом методе экземплярадобавить материал в сессию.Но однажды я внес изменения в аннотацию.Переменная httpsess возвращает ноль.Когда я создаю переменную как локальную переменную, она работает нормально.Почему это случилось?

1 Ответ

0 голосов
/ 04 ноября 2011

В JSF 2.x создание HttpSession максимально откладывается, чтобы избежать ненужного создания сеанса.Он будет создан только тогда, когда это действительно необходимо .Очевидно, он еще не был создан в тот момент, когда вы его называете.Передача false в getSession() означает, что контейнер не должен автоматически создавать его, если он не существует.Так что, если он еще не существует, он просто вернет null.

Вам нужно вместо этого передать true в getSession().

HttpSession httpsess = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);

См. Также:


Не связано с конкретной проблемой, это кодовый запах.Для чего именно вам нужен HttpSession?Чтобы получить / установить некоторые атрибуты?Почему бы просто не сделать это свойством управляемого bean-объекта области действия сеанса?Управляемый компонент JSF в области сеанса сам по себе уже сохранен как атрибут сеанса.

...