【问题标题】:Prevent ajax call via JS validation通过 JS 验证防止 ajax 调用
【发布时间】:2016-04-22 06:11:20
【问题描述】:

在某些情况下,我需要进行一些简单的客户端验证,并根据这些验证是否触发 ajax 调用。 但是,在 IE 中,即使在 onchange 或 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:ajax onstart 中返回 false 确实取消了 AJAX 请求!问题解决了。

标签: jsf jsf-2 primefaces


【解决方案1】:

另一种选择是 &lt;p:remoteCommand&gt;

    <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" 注意到你正在使用 &lt;p:ajax&gt; 虽然它在这里没有给你任何问题但是强制 jsf 跳过一些生命周期步骤是不好的,除非你有要求

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2021-07-03
    • 2014-11-15
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多