Как обеспечить соблюдение JSF для создания нового экземпляра бобов вместо того, чтобы бросать NullPointerException?

StackOverflow https://stackoverflow.com/questions/1922434

Вопрос

Я почти уверен, что делаю что -то не так, и поэтому название вопроса немного неверно.

У меня есть форма с несколькими полями для создания новых пользовательских объектов (такие поля, как вход в систему, пароль, день рождения и т. Д.). И у меня есть 2 кнопки - отменить и создавать. Я еще не закончил создавать :), но когда я нажимаю на отмену, я вижу NullPointerException. Вот упрощенный код:

<f:view>
    <h:form>
        <h:panelGroup layout="block">       
            <h:inputText id="add_login" value="#{userSupport.user.login}"/>
            <h:inputSecret id="add_password" value="#{userSupport.user.password}"/>
            <h:inputText id="add_name" value="#{userSupport.user.name}"/>
            <h:inputText id="add_surname" value="#{userSupport.user.surname}"/>

            <h:commandButton value="Cancel" action="cancel"/>
        </h:panelGroup>
    </h:form>
</f:view>

У пользовательского класса есть поле user с Getter и Setter и некоторыми другими методами. Это весенний боб с сессией.

Когда я нажимаю на отмену, я вижу NPE, потому что JSF пытается сохранить значения от входов в пользовательском объекте, но пользовательский объект является нулевым.

Как это правильный способ сделать это?

Это было полезно?

Решение

На вашем наборе кнопки отмены immediate="true"Это пропустит все «нежелательные» фазы.

Такая же проблема, однако, возникнет с вашей кнопкой «Создать», и вы не должны использовать immediate там. Лучше инициализировать user свойство - либо в конструкторе, либо используя @PostConstruct Аннотация на методе, который выполняет действия инициализации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top