f: setPropertyActionListener устанавливает нулевое значение вместо намеченного значения - PullRequest
2 голосов
/ 14 ноября 2011

Мой взгляд:

<h:commandLink value="BookFlight" action="#{bookSeatController.doLoginOrCC}">
   <f:setPropertyActionListener target="#{bookSeatController.flightNumber}" 
                  value="#{flightInfoController.flight.number}" />
</h:commandLink>

Мой установщик:

public void setFlightNumber(String flightNumber) {
   this.flightNumber = flightNumber;
}

Когда я использую отладчик, я получаю flightNumber из null в установщике.Однако, если я изменю представление на следующее:

<h:commandLink value="BookFlight" action="#{bookSeatController.doLoginOrCC}">
   <f:setPropertyActionListener target="#{bookSeatController.flightNumber}" 
                  value="122334" />
</h:commandLink>

Свойство flightNumber установлено в 122334. Как это вызвано и как я могу решить его, чтобы установить требуемое значение вместо null

Ответы [ 2 ]

7 голосов
/ 14 ноября 2011

Если #{flightInfoController.flight.number} является областью запроса, то он должен сохранить точно такой же flight во время запроса на обработку отправки формы, как это было во время запроса на отображение формы.Это должно происходить в конструкторе (post) компонента.

Если это не вариант, поскольку он зависит от некоторых переменных, основанных на запросе, то лучше всего вместо этого поместить компонент в область представления (яоднако по-прежнему предполагается, что ваш компонент правильно спроектирован, чтобы он не выполнял никаких бизнес-задач / предварительной загрузки в геттеры).

Если помещение компонента в область представления, в свою очередь, не вариант, то вам нужновместо этого передать его как полноценный параметр запроса.Вы можете сделать это с помощью <f:param>.

<h:commandLink value="BookFlight" action="#{bookSeatController.doLoginOrCC}">
   <f:param name="flightNumber" value="#{flightInfoController.flight.number}" />
</h:commandLink>

. Вы можете разрешить JSF установить @ManagedProperty в BookSeatController или <f:viewParam> в текущем представлении.

См.также:

0 голосов
/ 14 ноября 2011

Если это работает при назначении «122334», но при назначении flightInfoController.flight.number это «ноль», и поскольку вы не получаете никаких исключений, то это означает, что, вероятно, ваш flightInfoController не инициализирован должным образом (относительно его поля flightследовательно, number в flight).

Просто убедитесь, что компонент правильно инициализирован (или обновите ваш OP с помощью кода компонента).

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