【问题标题】:how to properly refresh p:dataView component after EntityManager saves dataEntityManager 保存数据后如何正确刷新 p:dataView 组件
【发布时间】:2022-10-07 14:43:17
【问题描述】:

因此,当我有一个显示记录的组件时,我曾多次遇到这种情况,例如,p:dataView 组件中的送货地址列表(但它可以是任何其他类似的组件)。

每行显示一个送货地址,在每一行内,我有一个编辑和删除命令按钮,如下一个 sn-p 所示:

<p:dataView id=\"dvBillingAddresses\"
    ...
    <p:commandButton icon=\"pi pi-pencil\" 
        oncomplete=\"PF(\'editBillingAddressDlg\').show()\"
        ...

编辑命令按钮将显示以下对话框:

<p:dialog header=\"Billing Address Details\" showEffect=\"fade\" modal=\"true\"
    widgetVar=\"editBillingAddressDlg\" responsive=\"true\" width=\"450\">
    ...
    <f:facet name=\"footer\">
        <p:commandButton value=\"Save\" icon=\"pi pi-check\" actionListener=\"#{bean.saveBillingAddress}\"
        ...

因此,将通过调用 bean 方法保存记录,并且在所述方法结束时,我将调用 PrimeFaces.current().ajax().update(\"...dvBillingAddresses\") 来刷新 p:dataView 组件。

但是,总是发生的情况是组件在数据完全提交到数据源之前被刷新,导致组件刷新旧数据。

我通常最终做的是在编辑对话框上使用 ajax 关闭事件,以便有额外的时间来更新数据。

<p:dialog header=\"Billing Address Details\" showEffect=\"fade\" modal=\"true\"
    widgetVar=\"editBillingAddressDlg\" responsive=\"true\" width=\"450\">
    <p:ajax event=\"close\" update=\"...dvBillingAddresses\" immediate=\"true\" global=\"false\" />
    ...

当我必须在确认后更新组件时,并且由于 p:confirmDialog 不支持 ajax 关闭事件;我在确认按钮上捕捉到单击事件,并以编程方式单击一个虚拟命令按钮,该按钮依次更新组件。

我知道这些不是正确的方法,因为它们感觉有点老套,但到目前为止,这让我能够继续开发。

理想情况下,组件应该等待刷新,直到实体的@PostLoad 事件被触发,即使必须显示旋转的刷新图标。

我在 payara 服务器上使用 PrimeFaces v11、eclipselink、mysql、jakartaee v8.0。

其他人是如何处理这个问题的?

谢谢 !!!

    标签: jpa jsf primefaces eclipselink


    【解决方案1】:

    尝试将update= 属性添加到您的&lt;p:commandButton/&gt;,以便在执行bean.saveBillingAddress() 操作后更新dataView。

    <p:dialog header="Billing Address Details" showEffect="fade" modal="true"
    widgetVar="editBillingAddressDlg" responsive="true" width="450">
    <h:form id="editBillingAddressForm">
    ....
    <f:facet name="footer">
        <p:commandButton value="Save" icon="pi pi-check"
         action="#{bean.saveBillingAddress}"
         update="@form ...dvBillingAddresses"
         oncomplete="if (!args.validationFailed) PF('editBillingAddressDlg').hide()"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-07
      • 2011-07-14
      • 1970-01-01
      • 2019-03-18
      • 2022-10-15
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多