18

ユーザーがラジオボタンをクリックするたびに検証メッセージを表示しようとしています。

これは、送信ボタンをクリックした場合にのみ機能しますが、ラジオボタンをクリックした場合は機能しません。

    <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>
4

1 に答える 1

37

HTML DOMchangeイベントは、ラジオボタン(またはチェックボックス)がクリックされたかどうかをリッスンする場合の間違ったイベントです。clickこのためにイベントを使用する必要があります。

ラジオボタン(およびチェックボックス)の値は、基本的に変更されません。常に同じ値です。問題は、その値がサーバー側に送信されるかどうかということです。これは、通常DOMclickイベントによってトリガーされる「チェック済み」状態によって決定されます。

changeラジオボタン/チェックボックスでのイベントの実際の動作は、使用するWebブラウザによって異なります。IEブラウザでは、動作に特に一貫性がありません。使用するバージョンだけでなく、使用するレンダリングモード(クァークズモードと標準モード)にも依存します。おそらく、テスト中に実際にIEを使用していました。

eventPrimeFaces <p:ajax>(および標準JSF )のデフォルトタイプ<f:ajax>。これはvalueChangeすでに自動的にこれをカバーしています。

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

これによりchange、テキスト入力とドロップダウンで適切なイベントハンドラーが自動click生成され、ラジオボタンとチェックボックスでイベントハンドラーが自動生成されます。

しかし、言ったように、それはすでにデフォルトのタイプです。 event完全に省略してください。

<p:ajax update="msgQuestion" />
于 2012-11-05T00:36:16.107 に答える