【发布时间】: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