Я не пробовал, но это звучит как типичная фазовая проблема.Короче говоря, это означает, что в 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).Таким образом, валидаторы других компонентов не называются.
Я рекомендую прочитать о фазах (например, здесь , где вы также найдете подробности о немедленных действиях в разделе «Немедленная обработка событий»)