Primefaces selectOneRadio ajax
Posted
技术标签:
【中文标题】Primefaces selectOneRadio ajax【英文标题】: 【发布时间】:2012-10-24 15:19:22 【问题描述】:我试图在用户每次单击单选按钮时显示验证消息。
这仅在我点击提交按钮时有效,但在我点击单选按钮时无效:
<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>
【问题讨论】:
这似乎与 ui:repeat...在没有 ui:repeat 的情况下工作正常。 请参考:-***.com/questions/14551145/… 【参考方案1】:当您想监听单选按钮(或复选框)是否被点击时,html DOM change
事件是错误的事件。您应该为此使用 click
事件。
单选按钮(和复选框)的值基本上不会改变。它始终具有相同的值。问题更多的是该值是否会发送到服务器端。这由通常由 DOM click
事件触发的“已检查”状态决定。
单选按钮/复选框上change
事件的实际行为取决于所使用的网络浏览器。该行为在 IE 浏览器中特别不一致。它不仅取决于使用的版本,还取决于使用的渲染模式(怪癖模式与标准模式)。也许您在测试时实际上正在使用 IE。
PrimeFaces <p:ajax>
(和标准 JSF <f:ajax>
)的默认 event
类型 valueChange
已经自动涵盖了这一点:
<p:ajax update="msgQuestion" event="valueChange" />
这将在文本输入和下拉菜单中自动生成正确的change
事件处理程序,并在单选按钮和复选框中自动生成click
事件处理程序。
但如前所述,它已经是 默认 event
类型。完全省略它。
<p:ajax update="msgQuestion" />
【讨论】:
这也不起作用。如果我删除 ui:repeat 它工作正常。以上是关于Primefaces selectOneRadio ajax的主要内容,如果未能解决你的问题,请参考以下文章
如何制作类似于 <h:selectOneRadio /> 的复合组件
f:ajax 监听器不能与 h:selectOneRadio 一起使用
JSF 2 selectOneRadio未在Bean中设置值[重复]