Ошибка реализации кнопки сброса в ICEfaces 1.8.2 - PullRequest
1 голос
/ 08 марта 2011

У меня есть форма со значениями, заполненными из базы данных.Форма состоит из нескольких компонентов ice: inputText с частичным значением SubSubmit = "true", поэтому поля будут проверены, когда они потеряют фокус.Форма имеет кнопку сохранения и кнопку сброса.Кнопка сброса имеет немедленное значение = «истина» и представляет собой обычный лед: commandButton, т. Е. Не тип = «сброс».

Типичное поле inputText:

<ice:inputText id="input1" maxlength="6" size="6" value="#{client.inboxThreshold}" partialSubmit="true">
    <f:convertNumber integerOnly="true" />
    <f:validateLongRange minimum="0" />
</ice:inputText>

«Сброс»кнопка:

<ice:commandButton value="Reset" style="margin-left:5px;" actionListener="#{client.reset}" immediate="true"/>

Проблема заключается в следующем: когда пользователь изменяет значения и нажимает кнопку сброса, запускается actionListener, который обновляет значения вспомогательного компонента.Ошибки проверки удаляются, однако значения модели не обновляются при визуализации страницы.

Фазовый прослушиватель указывает, что он переходит от Apply_Request_Values ​​к Render_Response.Итак, я думаю, что мне нужно вручную запустить фазу Update_model_values.

Идеи?

Ответы [ 2 ]

1 голос
/ 13 марта 2011

Я не пробовал, но это звучит как типичная фазовая проблема.Короче говоря, это означает, что в actionListener вы устанавливаете значения bean-компонента в фазе, которая является слишком ранней.Они будут переопределены submitedValue компонента jsf.Есть два возможных решения.

Сначала необходимо связать компонент и установить желаемое значение непосредственно в компоненте через setSubmittedValue.

Лучшее решение - второе.Вы используете тег ice:setEventPhase (см. taglib ).При этом вы можете принудительно вызывать actionListener на более позднем этапе, поэтому значение в bean-компоненте не переопределяется переданным значением в компоненте jsf.

Так что попробуйте окружить ice:commandButton <ice:setEventPhase phase="INVOKE_APPLICATION">.

PS:

Фазовый слушатель указывает, что он переходит от Apply_Request_Values ​​к Render_Response.Итак, я думаю, что мне нужно вручную запустить фазу Update_model_values.

Это происходит от immediate="true".При этом ICEfaces выполняет все фазы для компонента (в вашем случае commandButton) во второй фазе (Apply_Request_Values) и затем переходит для других компонентов непосредственно к последней фазе (Render_Response).Таким образом, валидаторы других компонентов не называются.

Я рекомендую прочитать о фазах (например, здесь , где вы также найдете подробности о немедленных действиях в разделе «Немедленная обработка событий»)

0 голосов
/ 08 марта 2011

Это связано с тем, что компоненты будут отображать отправленные значения, а не данные из вашего прежнего состояния, см. http://wiki.apache.org/myfaces/ClearInputComponents для решений.

...