Primefaces blockUI AJAX更新后停止工作(Primefaces blockUI

2019-06-28 06:39发布

我想创建显示blockUI每当忙一个DataTable,我大部分很成功。 现在灰色并显示“正在加载...”每当我通过点击标题,或者通过数据表页面单击任一两个命令的,排序的数据表。 你可以看到它的代码如下。

问题是,我已经使用CommandButton控件之一(运行阻塞元素的AJAX更新)后,后续操作不触发blockUI(直到我刷新页面)。 例如:

  • 加载页面
  • 单击数据表头 - blockUI出现,直到表整理完
  • 单击数据表页面导航按钮之一 - blockUI出现,直到页面加载
  • 点击CommandButton控件之一 - blockUI出现,直到按钮的ActionListener的已完成
  • 单击数据表头 - 表格排序,但blockUI不会出现。
  • 单击数据表页面导航按钮之一 - 页面加载,但blockUI不会出现
  • 点击CommandButton控件之一 - ActionListener的运行和表更新,但blockUI不会出现
  • 刷新页面 -一切正常再

改变CommandButton控件更新=‘’属性到AJAX =‘假’将导致排序/寻呼以始终显示blockUI,但CommandButton控件从不显示blockUI。

有任何想法吗?

<div class="buttonDiv">
    <p:commandButton ... update="resultsPanel" id="submitButton" ... />
    ...
    <p:commandButton ... update="resultsPanel" id="resetScenarioButton" ... />
</div>
<p:panel header="Results Grid" id="resultsPanel">
    ...
    <p:dataTable ... id="VAResults" ... >
        ...
    </p:dataTable>
    ....
</p:panel>
<p:blockUI block="resultsPanel" trigger="submitButton, resetScenarioButton, VAResults">
    Loading...
</p:blockUI>

Answer 1:

所述trigger属性结合上指定的元素的jQuery听众。 但是,如果更新了一个元素绑定丢失。 我不知道,如果它的工作原理,但你可以尝试移动<p:blockUI里面resultsPanel 。 我怀疑,当你更新blockUI过于更新面板,从而重新结合听者的数据表。

<p:panel header="Results Grid" id="resultsPanel">
    ...
    <p:dataTable ... id="VAResults" ... >
        ...
    </p:dataTable>
    ....
    <p:blockUI block="resultsPanel" trigger="submitButton, resetScenarioButton, VAResults">
    Loading...
</p:blockUI>
</p:panel>


Answer 2:

我有同样的问题,一种呈三角情景:

<p:dataTable>
    ....
    <p:ajax event="rowSelect" update="buttons" global="false" onstart="blockMessageButtons.show();" oncomplete="blockMessageButtons.hide();"/>
</p:dataTable>

<p:outputPanel layout="block" id="buttons">
    <!-- content to be blocked -->
</p:outputPanel>

<p:blockUI block="buttons" widgetVar="blockMessageButtons"/>

问题是,面板上的按钮被均由AJAX更新,并且通过blockUI阻断。 我不得不把它一分为二:

<p:dataTable>
    ....
    <p:ajax event="rowSelect" update="buttons-content" global="false" onstart="blockMessageButtons.show();" oncomplete="blockMessageButtons.hide();"/>
</p:dataTable>

<p:outputPanel layout="block" id="buttons-container">
    <p:outputPanel layout="block" id="buttons-content">
        <!-- content to be blocked -->
    </p:outputPanel>
</p:outputPanel>

<p:blockUI block="buttons-container" widgetVar="blockMessageButtons"/>


文章来源: Primefaces blockUI stops working after ajax update