Jsf 通过JS验证防止ajax调用

Jsf 通过JS验证防止ajax调用,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,在某些情况下,我需要做一些简单的客户端验证,根据这一点,是否触发ajax调用。 然而,在IE中,即使在onchange中返回false,或者在p:ajax上的onstart中返回false,ajax事件仍然会被触发 因此,我的组件当前看起来如下所示: <p:inputText id="pc" value="#{bean.pc}" valueChangeListener="#{bean.doStuff}" styleClass="if-nospace-upper" onchange=

在某些情况下,我需要做一些简单的客户端验证,根据这一点,是否触发ajax调用。 然而,在IE中,即使在onchange中返回false,或者在p:ajax上的onstart中返回false,ajax事件仍然会被触发

因此,我的组件当前看起来如下所示:

    <p:inputText id="pc" value="#{bean.pc}" valueChangeListener="#{bean.doStuff}" styleClass="if-nospace-upper" onchange="return isOK()">
        <p:ajax immediate="true"  onstart="PF('busyPopup').show();" oncomplete="PF('busyPopup').hide();" />
    </p:inputText>

当无效时,我的isOK()函数返回false,但ajax调用仍在进行,而我不希望它这样做

有没有可能做到这一点呢?

一种选择是

    <p:inputText id="pc" value="#{bean.pc}" 
         valueChangeListener="#{bean.doStuff}" styleClass="if-nospace-upper" 
          onchange="return isOK()">
     </p:inputText>
     <p:remoteCommand name="rc">
          <p:ajax  onstart="PF('busyPopup').show();" oncomplete="PF('busyPopup').hide();" />
     </p:remoteCommand>

请拿出
immediate=“true”
注意您正在使用的
,虽然这不会给您带来任何问题,但强制jsf跳过一些生命周期步骤并不好,除非您有需求,直到您有需求为止。似乎在p:ajaxonstart中返回false会取消ajax请求!问题解决了。
funtion isOK(){
//If Condtion matches
rc();
}