Подтвердить что ты не робот

Как использовать файлы cookie в JSF

У меня есть форма JSF поверх области действия JSF 1.2 Bean. У меня есть кнопка "Reset", которая отменяет сеанс.

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

Ищите лучший способ для этого.

Спасибо!

4b9b3361

Ответ 1

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

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

При запуске JSF поверх 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 поверх API Servlet, конечно), а затем используйте 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, нужное место зависит от единственного функционального требования. Вам нужно только убедиться, что вы не добавите файл cookie, когда ответ уже был зафиксирован, иначе это приведет к IllegalStateException.