【问题标题】:Primefaces selectOneRadio ajaxPrimefaces 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>

【问题讨论】:

标签: jsf jsf-2 primefaces selectoneradio


【解决方案1】:

当您想监听单选按钮(或复选框)是否被点击时,HTML DOM change 事件是错误的事件。您应该为此使用 click 事件。

单选按钮(和复选框)的值基本上不会改变。它始终具有相同的值。问题更多的是该值是否会发送到服务器端。这由通常由 DOM click 事件触发的“已检查”状态决定。

单选按钮/复选框上change 事件的实际行为取决于所使用的网络浏览器。该行为在 IE 浏览器中特别不一致。它不仅取决于使用的版本,还取决于使用的渲染模式(怪癖模式与标准模式)。也许您在测试时实际上正在使用 IE。

PrimeFaces &lt;p:ajax&gt;(和标准 JSF &lt;f:ajax&gt;)的默认 event 类型 valueChange 已经自动涵盖了这一点:

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

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

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

<p:ajax update="msgQuestion" />

【讨论】:

  • 这也不起作用。如果我删除 ui:repeat 它工作正常。
猜你喜欢
  • 2015-01-02
  • 2011-03-31
  • 2014-02-28
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 2012-04-06
  • 1970-01-01
相关资源
最近更新 更多