如何让“p:remoteCommand”触发“p:ajaxStatus”?

时间:2016-08-09 01:43:25

标签: primefaces jsf-2.2

有以下问题:在页面加载后有p:remoteCommand延迟加载p:dataTable,但是在ajax请求期间没有显示“p:ajaxStatus”的加载指示符...

当p:remoteCommand发送延迟加载数据的请求时,如何让“p:ajaxStatus”显示在页面上?

页面上的代码:

<h:form id="form">

    <p:remoteCommand name="loadLazyData" action="#{crmBackingBean.crmOnControlLazyInit}" autoRun="true" process="@this" update="dtCrmOnControl" />

    <p:dataTable id="dtCrmOnControl" var="rowData" value="#{crmBackingBean.crmOnControlLazy}" widgetVar="dtCrmOnControl" rows="#{crmBackingBean.crmDTonControlRows}" paginator="true" ..... lazy="true" >
        .......................................................
    </p:dataTable>

</h:form>

我使用Atlas主题,p:ajaxStatus位于其原始位置,在template.xhtml中:

<p:ajaxStatus style="width:40px; height:40px; position:fixed; right:30px; bottom:30px; z-index:999999;">
    <f:facet name="start">
        <i class="fa fa-circle-o-notch fa-spin Green Fs40"></i>
    </f:facet>
    <f:facet name="complete">
        <h:outputText value="" />
    </f:facet>
</p:ajaxStatus>

谢谢!

版本:PrimeFaces 6.0.2; PrimeFaces Atlas Theme 1.1.1; GlassFish 4.1.1 with JSF 2.2.12(Mojarra)

2 个答案:

答案 0 :(得分:0)

解决方案如下:

标记<p:ajaxStatus>应放在标记<p:remoteCommand>之前的xhtml源页面上。

环境:

  • PrimeFaces 6.0.2
  • PrimeFaces Atlas Theme 1.1.1
  • GlassFish 4.1.1 with JSF 2.2.12(Mojarra)

答案 1 :(得分:-1)

似乎你错过了一些基本的定义。您的状态应该如何发现有任何行动?另外,我想您想在等待期间显示对话框并在ajaxStatus中配置其样式,这是正确的吗?

如果是这样,我建议您按<p:dialog>创建自己的对话框,并按照Primefaces展示中的说明将onstartonsuccess属性添加到ajaxStatus:{{ 3}}

这将是

<p:ajaxStatus onstart="PF('statusDialog').show()" onsuccess="PF('statusDialog').hide()" />

<p:dialog widgetVar="statusDialog" modal="true" draggable="false" closable="false" resizable="false" showHeader="false">
    <p:graphicImage name="waiting_picture.gif" />
</p:dialog>

您可以轻松地将此解决方案与数据表/分页器结合使用。

我希望这有帮助!

编辑:为什么不定义每页的行数以支持延迟加载? http://www.primefaces.org/showcase/ui/ajax/status.xhtml

编辑2:您也可以在开始时调用loadLazyData方法:

<p:ajaxStatus onstart="loadLazyData" />

或类似的东西......