在某些情况下,我需要进行一些简单的客户端验证,并且根据这一点,发出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调用,而我不想这样做。
有没有可能做到这一点?
答案 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跳过一些生命周期步骤是不好的,除非你有要求