通过JS验证防止ajax调用

时间:2016-04-22 06:11:21

标签: jsf jsf-2 primefaces

在某些情况下,我需要进行一些简单的客户端验证,并且根据这一点,发出ajax调用与否。 但是,似乎在IE中,即使在onchange中返回false,或者在p:ajax上的onstart中,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调用,而我不想这样做。

有没有可能做到这一点?

1 个答案:

答案 0 :(得分:1)

另一种选择是 <p:remoteCommand>

    <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>

来自javascript:

funtion isOK(){
//If Condtion matches
rc();
}

并且请注意immediate="true"注意到你正在使用<p:ajax>,虽然这里没有给你任何问题,但强迫jsf跳过一些生命周期步骤是不好的,除非你有要求