JSF 1.2: selectOneRadio с a4j: поддержка не работает должным образом

Привет, у меня есть следующий фрагмент кода.

Идея заключается в том, что я хочу иметь выбор, и в зависимости от этого выбора я хочу отобразить некоторые дополнительные поля в форме.

Поэтому, если пользователь отвечает «Да», он должен заполнить дополнительные поля. Эта часть поддержки a4j: связана с тем, что я хочу сохранить любой ввод пользователя в других полях (ajaxSingle = "false"), и я не хочу обновлять модель и запускать какие-либо валидаторы до тех пор, пока пользователь не заполнит всю форму (немедленно = "true"). Я хочу обновить только одно свойство bean.answer (a4j: actionparam), потому что оно контролирует видимые компоненты формы.

<h:form id="form">
    ...

    <h:selectOneMenu id="question"
                     value="#{bean.answer}" 
                     required="true">
        <f:selectItem itemLabel="No"  itemValue="false" />
        <f:selectItem itemLabel="Yes" itemValue="true" />
        <a4j:support event="onchange"
                     ajaxSingle="false"
                     immediate="true"
                     reRender="form">
            <a4j:actionparam name="question" 
                             value="$('form:question').value" 
                             assignTo="#{bean.answer}" 
                             noEscape="true"/>
            </a4j:support>
    </h:selectOneMenu>

...

    <h:outputText value="Additional field" 
                  styleClass="boldedFont" 
                  rendered="#{bean.answer}"/>
    <h:inputText  id="fieldId"
                  value="#{bean.additionalFieldValue}"
                  required="true"
                  rendered="#{bean.answer}"/>
...

</h:form>

Приведенный выше код работает так, как я хочу. Каждый раз, когда я меняю свой ответ, значение bean-компонента # {bean.answer} обновляется, форма перерисовывается и дополнительные поля появляются / исчезают.

Проблема:

Я хочу изменить поплист (selectOneMenu) на радио-кнопки (selectOneRadio). Поэтому в моем новом коде я просто изменил h: selectOneMenu на h: selectOneRadio:

<h:form id="form">
    ...

    <h:selectOneRadio id="question"
                     value="#{bean.answer}" 
                     required="true">
        <f:selectItem itemLabel="No"  itemValue="false" />
        <f:selectItem itemLabel="Yes" itemValue="true" />
        <a4j:support event="onchange"
                     ajaxSingle="false"
                     immediate="true"
                     reRender="form">
            <a4j:actionparam name="question" 
                             value="$('form:question').value" 
                             assignTo="#{bean.answer}" 
                             noEscape="true"/>
            </a4j:support>
    </h:selectOneRadio>

...

    <h:outputText value="Additional field" 
                  styleClass="boldedFont" 
                  rendered="#{bean.answer}"/>
    <h:inputText  id="fieldId"
                  value="#{bean.additionalFieldValue}"
                  required="true"
                  rendered="#{bean.answer}"/>
...

</h:form>

Но этот код не работает. Каждый раз, когда я меняю свой ответ, значение bean-компонента # {bean.answer} обновляется с тем же значением «false», и дополнительные поля никогда не появляются.

Есть ли простой способ добиться того же поведения с h: selectOneRadio, что и с h: selectOneMenu?

Спасибо


person bary    schedule 11.10.2012    source источник


Ответы (1)


Событие onchange - это неподходящее событие для прослушивания изменений в группе переключателей или флажков. Они существуют в основном из нескольких входных элементов, а не только из одного. Вместо этого вам понадобится onclick.

person BalusC    schedule 14.10.2012
comment
Спасибо, изменение onchange enevt на событие onclick сработало, но мне пришлось сделать еще одну модификацию этого кода value="$('form:question').value" - ›value="this.value" из-за нескольких входов с разными идентификаторами, такими как form:question:0, form:question:1 - person bary; 16.10.2012