Почему конверсия не пропускается? - PullRequest
0 голосов
/ 16 июня 2011

У меня два компонента ввода на моей странице .У каждого из них есть конвертер (это конвертер, который проверяет пустые значения, как требуется JSF, но по некоторым причинам я не могу использовать jsf один, поэтому я сделал свой собственный конвертер).

У меня также есть ice:selectBooleanCheckbox:

<ice:selectBooleanCheckbox
                    styleClass="graUserAppUserGroupAddChk"
                    value="#{userGroupTableNewRecordBean.addNewDomain}"
                    partialSubmit="true"
                    immediate="true"
                    valueChangeListener="#{userGroupTableNewRecordBean.addDomainListener}"></ice:selectBooleanCheckbox>

Как вы видите, я добавляю к нему атрибут immediate=true, потому что когда я выбираю этот флажок, я хочу, чтобы фаза преобразования была пропущена, ноэто не работает , преобразователи все еще показывают свои предупреждения.Знаете ли вы, почему?

Я также добавил valueChangeListener к этому флажку и вызвал туда renderResponse напрямую, основываясь на этой цитате:

So in the value changed listener method for the dropdown lists, just 

вызов метода renderResponse () из FacesContextобъект, проверка и преобразование обойдены, и вы все равно можете делать, что хотите.

public void addDomainListener(final ValueChangeEvent valueChangeEvent) {
    // skip validation
    logger.info("listener calleddddddddddddd");
    FacesContext.getCurrentInstance().renderResponse();
}

Может быть, гуру JSF может помочь?

Большое спасибо ...

ОБНОВЛЕНИЕ : Я знаю, что решение было бы поставить флажок в отдельной форме, но я не могу себе этого позволить ...

ОБНОВЛЕНИЕ 2 : IИсправлен некоторый код для слушателя, поэтому теперь он вызывается при нажатии, но преобразователь все еще не работает и фаза ответа рендеринга не выполнена ...

ОБНОВЛЕНИЕ 3 : Это не проблема Icefaces ... Я пытался с h:selectBooleanCheckbox, и это происходит так же ...

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

Весь вопрос и функциональные требования, стоящие за всем этим, довольно запутанны.Почему вы используете конвертер вместо валидатора для проверки входных данных?Почему вы используете конвертер / валидатор, если вам кажется, что вас не волнует результат конверсии / проверки?

Как видите, я добавляю в него атрибут немедленный = true, потому что когда яустановите этот флажок. Я хочу, чтобы этап преобразования был пропущен, но он не работает, преобразователи по-прежнему отображают свои предупреждения.

Установка immediate="true" для компонентов ввода не пропускает преобразование /Проверка.Они просто переносят преобразование / проверку на более раннюю фазу (т. Е. Это происходит на этапе применения значений запроса вместо фазы проверки).В основном вам необходимо удалить immediate="true" из этих входов и поместить их в командную ссылку / кнопку, чтобы пропустить преобразование / проверку этих входов.См. Также Отладка жизненного цикла JSF :

Хорошо, когда я должен использовать непосредственный атрибут?

Если он не совсем понятенТем не менее, вот краткое изложение, дополненное примерами использования в реальных условиях, когда они могут быть полезны:

  • Если установлено только в UIInput (s), этап проверки процесса будет проходить ввместо этого примените фазу значений запроса.Используйте это, чтобы определить приоритетность проверки для UIInput компонента (ов).Если проверка / преобразование завершается неудачно для любого из них, не немедленные компоненты не будут проверяться / преобразовываться.

  • Если задано только в UICommand, этап применения значений запроса доЭтапы обновления значений модели будут пропущены для любого из компонентов UIInput.Используйте это, чтобы пропустить всю обработку формы.Например, кнопка «Отмена» или «Назад».

  • Если установлено в обоих компонентах UIInput и UICommand, фаза применения значений запроса до тех пор, пока фазы обновления значений модели не будут пропущены длялюбой из компонентов UIInput, для которых этот атрибут не установлен.Используйте это, чтобы пропустить обработку всей формы, ожидаемой для определенных полей (с немедленным).Например, кнопка «Забыли пароль» в форме входа в систему с обязательным, но не немедленным паролем.

0 голосов
/ 16 июня 2011

Наконец-то решено ...

Я выкладываю здесь сумму вопроса и решения.

У меня во всплывающем окне был флажок. Когда я выбираю его , я хочу показать некоторые скрытые поля , но это не сработало, потому что у меня также было два обязательных поля на той же странице, так что наступил этап jsf PROCESS_VALIDATIONS до ...

Я думал, что установка immediate=true решит это, но это не ...

Итак, в моем ValueChangeListener флажка мне пришлось вручную пропустить этап проверки JSF:

public void addDomainListener(final ValueChangeEvent valueChangeEvent) {
        // skip validation
        final PhaseId phaseId = valueChangeEvent.getPhaseId();
        final Boolean newValue = (Boolean) valueChangeEvent.getNewValue();
        if (phaseId.equals(PhaseId.ANY_PHASE)) {
            valueChangeEvent.setPhaseId(PhaseId.UPDATE_MODEL_VALUES);
            valueChangeEvent.queue();

            this.addNewDomain = newValue;
            FacesContext.getCurrentInstance().renderResponse();
        }
    }
...