Как @CookieParam
package name намеков, это специфично для JAX-RS, другой framefork Java EE для RESTful веб-служб. Это будет работать только в управляемом ресурсе JAX-RS в аннотации @Path
. Это не будет работать в управляемом компоненте JSF или CDI как аннотируется @ManagedBean
или @Named
.
Если вы используете JSF @ManagedBean
для управления компонентом, то он доступен EL-оценкой #{cookie.username}
как @ManagedProperty
.
@ManagedBean
public class Bean {
@ManagedProperty("#{cookie.username}")
private String username;
// ...
}
Если вы используете КДИ-х @Named
управлять бобом, то вы либо прибегать к пользовательской аннотации, или захват его как Cookie
из текущего FacesContext
. Как бывший не тривиально (но на самом деле хорошая идея для OmniFaces, хотя), я покажу только последний:
@Named
public class Bean {
private String username;
@PostConstruct
public void init() {
Cookie cookie = (Cookie) FacesContext.getCurrentInstance().getExternalContext().getRequestCookieMap().get("username");
if (cookie != null) {
username = cookie.getValue();
}
}
// ...
}
Тогда для того, чтобы сохранить его, единственный способ использует ExternalContext#addResponseCookie()
.
FacesContext.getCurrentInstance().getExternalContext().addResponseCookie("username", username, properties);
Не забудьте принять во внимание, что значение cookie является очень ограничительным по отношению к допустимым символам. Возможно, вам понадобится URL-encode и -decode при сохранении и извлечении. Библиотека утилиты JSF OmniFaces предлагает вспомогательные методы, которые делают это неявно.
username = Faces.getRequestCookie("username");
Faces.addResponseCookie("username", username, -1);
Unrelated к конкретной проблеме, сохранение чего-то чувствительное как "имя пользователя", как печенье страшно. Знаете ли вы, что файлы cookie манипулируют конечным пользователем? Что человек, посещающий вашу веб-страницу, может легко отредактировать значение cookie, представляющее «имя пользователя», для кого-то другого?
"login bean"? Боб? Что это за класс? Кто управляет этим классом? Какую веб-инфраструктуру вы используете на самом деле? '@ CookieParam' - это как подсказки имени пакета, специфичные для JAX-RS, среды RESTful Java EE и, очевидно, не будут работать над классами, управляемыми другой инфраструктурой Java EE, такими как JSF, Servlet и т. Д. – BalusC
О, хорошо , ya структура - JSF. Я бы не знал, что они несовместимы. Однако я не могу найти никаких ресурсов. – user1795370