Исключение Nullpointer при использовании bean-компонента @RequestScoped - PullRequest
0 голосов
/ 30 марта 2012

Я занят написанием очень простой страницы входа в систему с использованием JavaEE6, JSF 2.0 и CDI.Моя страница входа выглядит следующим образом (некоторые вещи удалены для ясности):

<html>
    <head>
        <title>HomeBase - Login</title>
    </head>
    <body>
        <h3>Login</h3>
        <h:form>
            <div>
                <label>UserID:</label>
                <h:inputText value="#{loginBean.userid}" />
            </div>
            <div>
                <label>Password:</label>
                <h:inputSecret value="#{loginBean.password}" />
            </div>
            <h:commandButton value="Login" action="#{loginBean.login}" />
        </h:form>
    </body>
</html>

, а бэк-бин выглядит следующим образом:

@ManagedBean
@RequestScoped
public class LoginBean implements Serializable {

    @Inject Logger LOG;

    private String userid;

    private String password;

    public String login() {
        LOG.info("Start login procedure.");
        if ("gast".equalsIgnoreCase(userid) && "gast".equals(password)) {
            SessionBean sessionBean = (SessionBean) FacesContext.getCurrentInstance()
                    .getExternalContext().getSessionMap().get("sessionBean");
            User user = new User();
            user.setUserid(userid);
            user.setPassword(password);
            user.setUsername("Gast");
            sessionBean.setUser(user);
            return "loginSuccess";
        }

        return "loginFailure";
    }

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Теперь, когда я вызываю страницу входа, она отображается правильно,Оба поля ввода пусты.Находясь в режиме отладки, я вижу, как вызывается метод получения обоих значений поля.Затем я заполняю поля и нажимаю кнопку отправки, и сразу же возникает исключение нулевого указателя.Ясно, что LoginBean устанавливается впервые (когда отображается страница), но НЕ, когда я нажимаю кнопку команды.

Что случилось?

1 Ответ

1 голос
/ 30 марта 2012

CDI @Inject не работает в JSF @ManagedBean.Следовательно, LOG остается null.

Используйте CDI @Named вместо JSF @ManagedBean и убедитесь, что вы импортируете аннотацию @RequestScoped из пакета CDI javax.enterprise.context вместо JSF javax.faces.bean.

...