Обновить значение других компонентов ввода при изменении h: selectOneMenu

У меня есть форма JSF 2.2, которая содержит один <h:selectOneMenu>, входы и 4 кнопки для вызова методов CRUD. Чтобы добиться привязки, я использовал valueChangeListener, поэтому, когда я выбирал id из <h:selectOneMenu>, я вызывал метод, который обновляет объект, связанный с входными данными. Проблема в том, что входные данные не меняют своего значения.

Форма

<h:selectOneMenu value="#{avocatBurController.numProf}"
                 valueChangeListener="#{avocatBurController.handelValueCahnge}" onchange="submit()">
    <f:selectItems value="#{avocatBurController.lstAvocatbureau}" var="avcBur"
                   itemValue="#{avcBur.avocat.numProf}" itemLabel="#{avcBur.avocat.nom}" />
</h:selectOneMenu>

<h:inputText value="#{avocatBurController.avc.prenom}" />
<h:inputText value="#{avocatBurController.avc.nom}" />
...

Управляемый компонент

    public void handelValueCahnge(ValueChangeEvent event) {
        String numProf = (String) event.getNewValue();
        AvocatBurDao avcBurDao = new AvocatBurDao();
        avcBur = avcBurDao.getAvocatBur(numProf);
        avc = avcBur.getAvocat();
        System.out.println(avc.getNom());
    }

avc.getNom() содержит значение, а входные данные — нет.


person Tarik Moumini    schedule 23.06.2015    source источник


Ответы (1)


valueChangeListener — это неправильный инструмент для обновления значений других входных компонентов при изменении текущего входа. Есть способы, но они основаны на хаках/трюках, изобретенных в темную эпоху JSF 1.x, когда ajax еще не существовало.

Поскольку вы уже используете JSF 2.x, просто сразу используйте ajax.

<h:selectOneMenu value="#{avocatBurController.numProf}">
    <f:selectItems value="#{avocatBurController.lstAvocatbureau}" var="avcBur"
                   itemValue="#{avcBur.avocat.numProf}" itemLabel="#{avcBur.avocat.nom}" />
    <f:ajax listener="#{avocatBurController.handleValueChange}" render="@form" />
</h:selectOneMenu>
public void handleValueChange() {
    AvocatBurDao avcBurDao = new AvocatBurDao();
    avcBur = avcBurDao.getAvocatBur(numProf);
    avc = avcBur.getAvocat();
}

Смотрите также:

person BalusC    schedule 23.06.2015