在Primefaces ajaxStatus中添加异常以允许数据表

时间:2015-09-28 13:04:04

标签: jsf primefaces

我有一个数据表,它同时包含一个rowSelect ajax事件(用于选择一行并在某些底部面板上显示一些额外信息)和一个rowDblselect ajax事件(用于在编辑窗口中打开该记录)。

<p:ajax event="rowSelect" listener="#{myBean.onSagRowSelect}" update=":bottomPanel" />
<p:ajax event="rowDblselect" listener="#{myBean.onSagRowDblClick}" update=":content" onstart="startWait();" oncomplete="stopWait();"/>

这很好用,直到我们添加了一个ajaxStatus组件,用于在进行ajax调用时显示加载条gif,让用户知道页面中发生了什么。问题是这个ajaxSTatus组件阻塞了我的rowDblselect事件,现在它只会触发rowSelect事件,即使我双击一行。

    <p:ajaxStatus onstart="PF('loadingDialog').show()" onsuccess="PF('loadingDialog').hide()" />
    <p:dialog widgetVar="loadingDialog" modal="true" draggable="false" closable="false" resizable="false" showHeader="false">
        <p:graphicImage name="../images/ajaxloadingbar.gif" />
     </p:dialog> 

我们正在使用Primefaces 5.2。

有什么方法可以配置ajaxStatus来延迟onstart或类似的东西,以便它允许我的双击事件完成?

欢迎就此事提供任何帮助/建议。谢谢!

1 个答案:

答案 0 :(得分:0)

我自己没有尝试过,但我认为您可以延迟使用JavaScript setTimeout显示所有事件的对话框,如下所示:

<p:ajaxStatus onstart="setTimeout(function() { PF('loadingDialog').show(); }, 500);"
    onsuccess="PF('loadingDialog').hide()" />

其他选项是将global="false"设置为仅p:ajax的{​​{1}} - 它应该停止为此特定事件触发rowSelect。然后,您必须定义ajaxStatus属性以显示具有延迟的对话框(如上所示)和onstart以再次隐藏它:

oncomplete

顺便说一句,我认为在这种情况下你应该真的使用<p:ajax event="rowSelect" listener="#{myBean.onSagRowSelect}" update=":bottomPanel" global="false" onstart="setTimeout(function() { PF('loadingDialog').show(); }, 500);" oncomplete="PF('loadingDialog').hide();" /> 而不是oncomplete,因为如果ajax请求由于某种原因失败,对话框可能会保持显示,阻止你的应用程序由于它的形态。