Primefaces selectOneRadio ajax

DD.*_*DD. 16 jsf primefaces jsf-2 selectoneradio

每次用户点击单选按钮时,我都会尝试显示验证消息.

这仅在我单击提交按钮时有效,但在单击单选按钮时不起作用:

    <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>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 32

change当您想要监听单击单选按钮(或复选框)时,HTML DOM 事件是错误的事件.你应该使用这个click事件.

单选按钮(和复选框)的值基本上不会更改.它始终具有相同的价值.问题是该值是否将被发送到服务器端.这由"检查"状态确定,该状态通常由DOM click事件触发.

change无线电按钮/复选框上事件的实际行为取决于所使用的webbrowser.IE浏览器中的行为特别不一致.它不仅取决于使用的版本,还取决于使用的渲染模式(怪癖模式与标准模式).也许你在测试时实际上是在使用IE.

eventPrimeFaces <p:ajax>(和标准JSF <f:ajax>)的默认类型,valueChange已经自动涵盖了这个:

<p:ajax update="msgQuestion" event="valueChange" />
Run Code Online (Sandbox Code Playgroud)

这将change在文本输入和下拉列表中自动生成正确的事件处理程序,并在click单选按钮和复选框中自动生成事件处理程序.

但如上所述,它已经是默认 event类型.完全省略它.

<p:ajax update="msgQuestion" />
Run Code Online (Sandbox Code Playgroud)

  • 我将我的JSF升级到2.1.13,现在工作正常! (2认同)