Primefaces selectOneRadio ajax

Я пытаюсь отображать сообщения проверки каждый раз, когда пользователь нажимает переключатель.

Это работает только тогда, когда я нажимаю кнопку отправки, но не когда я нажимаю переключатель:

    <h:form id="form">
        <p:panel id="panel">
            <ui:repeat value="#{questionsBean}" var="question">
                <h:panelGrid columns="3" style="margin-bottom:10px" cellpadding="5">
                    <h:outputText value="#{question.questionText}" />
                    <p:selectOneRadio id="question" value="#{question.response}"
                        validator="#{question.validate}" required="true">
                        <f:selectItem itemLabel="Yes" itemValue="Yes" />
                        <f:selectItem itemLabel="No" itemValue="No" />
                        <p:ajax update="msgQuestion" event="change"/>
                    </p:selectOneRadio>
                    <p:message for="question" id="msgQuestion" />
                </h:panelGrid>
            </ui:repeat>
            <p:commandButton id="btn" value="Save" update="panel" partialSubmit="true"/>
        </p:panel>
    </h:form>

person DD.    schedule 04.11.2012    source источник
comment
Похоже, это связано с ui:repeat... отлично работает без ui:repeat по одному вопросу.   -  person DD.    schedule 05.11.2012
comment
Пожалуйста, обратитесь к этому: - stackoverflow.com/questions/14551145/   -  person s khan    schedule 17.12.2013


Ответы (1)


Событие HTML DOM change является неправильным событием, когда вы хотите прослушать, нажат ли переключатель (или флажок). Для этого вы должны использовать событие click.

Значение переключателя (и флажка) практически никогда не меняется. Он всегда имеет одно и то же значение. Вопрос в том, будет ли это значение отправлено на сервер или нет. Это определяется состоянием «проверено», которое обычно вызывается событием DOM click.

Фактическое поведение события change для радиокнопок/флажков зависит от используемого веб-браузера. Поведение особенно непоследовательно в браузере IE. Это зависит не только от используемой версии, но и от используемого режима рендеринга (причудливый режим или стандартный режим). Возможно, вы действительно использовали IE во время тестирования.

Тип event по умолчанию PrimeFaces <p:ajax> (и стандартный JSF <f:ajax>), который valueChange, уже автоматически охватывает это:

<p:ajax update="msgQuestion" event="valueChange" />

Это автоматически сгенерирует правильный обработчик событий change для ввода текста и раскрывающихся списков, а также обработчик событий click для радиокнопок и флажков.

Но, как было сказано, это уже тип по умолчанию event. Просто исключите его вообще.

<p:ajax update="msgQuestion" />
person BalusC    schedule 05.11.2012
comment
Это тоже не работает. Если я удалю ui:repeat, он будет работать нормально. - person DD.; 05.11.2012