Из вашего компонента:
import javax.faces.bean.RequestScoped;
import javax.inject.Named;
@Named("loginRequest")
@RequestScoped
public class LoginRequest {
Вы смешиваете аннотации CDI и JSF.Вы можете и должны не сделать это.Используйте один или другой.Я не знаю, о чем говорится в книге, но, скорее всего, вы выбрали неправильное предложение автозаполнения при импорте аннотации @RequestScoped
.Обратите внимание на то, соответствует ли то, что IDE предлагает вам, тому, что говорится в книге.
Итак, вы должны использовать либо только аннотации CDI
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named("loginRequest")
@RequestScoped
public class LoginRequest {
или Только аннотации JSF
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name="loginRequest")
@RequestScoped
public class LoginRequest {
В противном случае область действия по умолчанию устанавливается на "none"
, и каждое отдельное выражение EL, ссылающееся на компонент, создает новый и отдельный экземпляр компонента.С тремя выражениями EL, ссылающимися на #{loginRequest}
, вы получите 3 экземпляра.Один, где задано имя, другой, где установлен пароль, и другой, где было вызвано действие.
Не связано с конкретной проблемой, имя управляемого компонента уже по умолчанию равноимя класса с 1-ым символом в нижнем регистре соответствует спецификации Javabean.Вы можете просто пропустить часть ("loginRequest")
.