Как заставить jsf создавать новый экземпляр bean-компонента вместо создания исключения NullPointerException? - PullRequest
0 голосов
/ 17 декабря 2009

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

У меня есть форма с несколькими полями для создания новых пользовательских объектов (поля, такие как логин, пароль, день рождения и т. Д.). И у меня есть 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>

Класс UserSupport имеет поле user с геттером и сеттером и некоторыми другими методами. Это бин Spring с областью действия Session.

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

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

1 Ответ

1 голос
/ 17 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...