【问题标题】:How to make "p:remoteCommand" to trigger "p:ajaxStatus"?如何使“p:remoteCommand”触发“p:ajaxStatus”?
【发布时间】:2016-08-09 01:43:25
【问题描述】:

有以下问题:有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 主题 1.1.1; GlassFish 4.1.1 与 JSF 2.2.12 (Mojarra)

【问题讨论】:

  • 如果您使用&lt;p:commandButton type="button" onclick="loadLazyData" /&gt; 并手动单击按钮,它是否有效?如果您在同一个表单中使用&lt;p:ajaxStatus&gt; 是否有效?
  • @Kukeltje,谢谢,&lt;p:commandButton type="button" onclick="loadLazyData();" /&gt; 有效,实际上它使我能够找到解决方案:我使用标准的 PrimeFaces Atlas 主题,其标准模板在 @987654328 之后包含 &lt;p:ajaxStatus /&gt; 标签@,因此显然 ajaxStatus 只是在 remoteCommand 之后加载时根本没有“听到”“remoteCommand”(实际上不确定它是错误还是功能......)所以基本上我的修复只是将&lt;p:ajaxStatus /&gt; 移到上面并把它作为 ` ` code 之后的第一个标签
  • 请将此创建为答案,但请确保在问题和答案中添加正确的版本信息!请在 PF 问题列表中提交错误。如果不是错误,至少应该记录在案!

标签: primefaces jsf-2.2


【解决方案1】:

解决方法如下:

标签&lt;p:ajaxStatus&gt;应该放在标签&lt;p:remoteCommand&gt;之前的xhtml源页面上。

环境:

  • PrimeFaces 6.0.2
  • PrimeFaces Atlas 主题 1.1.1
  • GlassFish 4.1.1 和 JSF 2.2.12 (Mojarra)

【讨论】:

    【解决方案2】:

    您似乎遗漏了一些基本定义。您的状态应如何通知正在进行任何操作?另外,我想您想在等待期间显示一个对话框并在ajaxStatus 中配置其样式,对吗?

    如果是这样,我建议您通过 &lt;p:dialog&gt; 创建一个自己的对话框,并将 onstartonsuccess 属性添加到您的 ajaxStatus,如 Primefaces 展示中所述:http://www.primefaces.org/showcase/ui/ajax/status.xhtml

    会是这样的

    <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/data/datatable/paginator.xhtml

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

    <p:ajaxStatus onstart="loadLazyData" />
    

    或者类似的...

    【讨论】:

    • 1:“您的状态应该如何通知有任何操作正在进行?” 不,文档状态:“AjaxStatus 是提供反馈的全局指标关于正在进行的 ajax 请求。" 2: "另外,我想您希望在等待期间显示一个对话框并在 ajaxStatus 中配置其样式,对吗?" 仅不需要如果你明确想要..
    • “编辑:你为什么不定义每页的行来支持延迟加载?”在基本页面加载后它仍然不加载它,但是在... “编辑 2:您也可以在开始时调用 loadLazyData 方法:” 所以您想(重新)加载页面上每个组件的每个 ajax 调用的数据?我不这么认为。
    • chaeschuechli,谢谢你的帖子! ...我正在寻找一个稍微不同的解决方案的唯一问题...重新提出的问题 - 我完全同意 Kukeltje cmets。
    猜你喜欢
    • 2015-05-06
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    相关资源
    最近更新 更多