我有一个数据表,它同时包含一个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或类似的东西,以便它允许我的双击事件完成?
欢迎就此事提供任何帮助/建议。谢谢!
答案 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请求由于某种原因失败,对话框可能会保持显示,阻止你的应用程序由于它的形态。