Как использовать куки в JSF - PullRequest
20 голосов
/ 05 апреля 2011

У меня есть форма JSF над компонентом Session Scope JSF 1.2. У меня есть кнопка «Сброс», которая делает сеанс недействительным.

Я пытался использовать файлы cookie для запоминания номера сеанса (не сеанса JSF, а моего личного номера сеанса) между сеансами, но мне не удалось. Мой вопрос - где находится правильное место (какой-нибудь слушатель? Bean Constructor?) Для инициализации, извлечения и хранения куки.

В поисках лучшего способа сделать это.

Спасибо!

1 Ответ

34 голосов
/ 06 апреля 2011

Вы можете получить все файлы cookie с помощью ExternalContext#getRequestCookieMap()

Map<String, Object> cookies = externalContext.getRequestCookieMap();
// ...

При запуске JSF поверх Servlet API (что верно в 99,9% случаев;)),значение карты преобразуется в javax.servlet.http.Cookie.

Cookie cookie = (Cookie) cookies.get(name);
// ...

В JSF 1.2, в которой отсутствует введенный в JSF 2.0 метод ExternalContext#addResponseCookie(), необходимо привестиExternalContext#getResponse() до HttpServletResponse (конечно, только при запуске JSF поверх Servlet API), а затем используйте HttpServletResponse#addCookie().

HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(maxAge); // Expire time. -1 = by end of current session, 0 = immediately expire it, otherwise just the lifetime in seconds.
response.addCookie(cookie);

Вы можете сделать это где угодно в нужном JSF-контексте, правильное место зависит от единственного функционального требования.Вам нужно только убедиться, что вы не добавляете куки-файл, когда ответ уже принят, в противном случае это приведет к IllegalStateException.

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