每次用户点击单选按钮时,我都会尝试显示验证消息。
这仅在我单击提交按钮时有效,但在我单击单选按钮时不起作用:
<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>
答案 0 :(得分:32)
当您想要监听单击单选按钮(或复选框)时,HTML DOM change
事件是错误的事件。您应该使用click
事件。
单选按钮(和复选框)的值基本上不会改变。它始终具有相同的价值。问题是该值是否将被发送到服务器端。这是由&#34;检查&#34;通常由DOM click
事件触发的状态。
change
事件在radiobuttons / checkboxes上的实际行为取决于所使用的webbrowser。 IE浏览器中的行为特别不一致。它不仅取决于使用的版本,还取决于使用的渲染模式(怪癖模式与标准模式)。也许你在测试时实际上是在使用IE。
PrimeFaces event
(以及标准JSF <p:ajax>
)的默认<f:ajax>
类型,valueChange
已自动涵盖此内容:
<p:ajax update="msgQuestion" event="valueChange" />
这将在文本输入和下拉列表中自动生成正确的change
事件处理程序,并在单选按钮和复选框中自动生成click
事件处理程序。
但如上所述,它已经是默认 event
类型。完全省略它。
<p:ajax update="msgQuestion" />