Русский English Тэги View Sergey Zolotaryov's profile on LinkedIn Вход
Почему JSF не обновляет состояние combobox
Постоянная ссылка 19-09-2008 anydoby java

Сегодня возился с одной занятной штучкой в JSF.

Проблема: есть UISelectOne со списком штатов и есть поле город и поле zip. IceFaces позволяет при выходе из любого поля (onblur) выполнять что-то, добавляя к полю ValueChangeListener и делая его partialSubmit=true. Вот такой кусочек кода делает работу:


    zip.addValueChangeListener(new ValueChangeListener() {
      public void processValueChange(ValueChangeEvent event) throws AbortProcessingException {
        if (FacesUtils.phaseHadArrived(event, PhaseId.UPDATE_MODEL_VALUES)) {
          String newPostalCode = (String)event.getNewValue();
          // do something with new postal code, change model values
          // change state code in the model...
        }
      }
    });

И самое забавное, что установка нового значения city в модели отражается в UI после окончания запроса, а установка нового state кода не обновляет значение в UISelectOne компоненте. До конца я не понял, какая разница между этими компонентами и почему в одном случае все работает, а в другом нет, но зато нашел решение, которое фиксит ошибку.

После того, как вы обновили значения в модели еще нужно явно установить в combo box'e submittedValue:


    stateCombo.setSubmittedValue("103");

Таким образом мы иммитируем сабмит нового значения и на экране все красиво обновляется.

Добавить комментарий

Предыдущая статья Осторожнее с varargs методами Следующая статья Преимущества генерированного кода на примере сортировки