如何以编程方式重新加载 p:dataGrid?

how to reload p:dataGrid programmatically?

我有一个带有订阅和取消订阅选项的数据网格,因此用户可以订阅和取消订阅,并进行反驳。 现在我想在订阅或取消订阅后重新加载数据网格

我这样加载网格的数据

@PostConstruct
    public void init() {

        packages = packagehelper.getAllPackages();

        getCurrentUserSubscritions();
    }

这是 xhtml 文件

<h:form id="form">
            <p:growl id="growl" showDetail="true" sticky="false" life="8000" />  
            <p:dataGrid  var="package" value="#{packageView.packages}" columns="3" 


                         >
                <p:column>
                    <f:facet name="header">
                        Cars for Sale
                    </f:facet>

                    <p:panel  header="#{package.id}" style="text-align:center">
                        <h:panelGrid  columns="2" style="width:100%">
                            <p:graphicImage width="100px" name="images/#{package.imageurl}"/> 
                            <h:outputText value="#{package.name}" />
                            <h:outputText value="#{package.value} EGP for #{package.duration} Days " />
                            <h:outputText value="#{package.description}" />

                            <p:commandButton ajax="true" update=":pack" value="Subscribe" rendered="#{!packageView.IsPackageActive(package.id)}"  action="#{packageView.Subscribe()}"  >
                                <f:setPropertyActionListener value="#{package.id}" target="#{packageView.packageID}" />
                                <f:setPropertyActionListener value="#{package.duration}" target="#{packageView.packageDuration}" />
                            </p:commandButton>


                            <p:commandButton action="#{packageView.Unsubscribe}" update=":pack" ajax="true" value="Cancel" rendered="#{packageView.UserHasPackage(package.id) and packageView.IsPackageActive(package.id)  }">

                               <f:setPropertyActionListener value="#{package.id}" target="#{packageView.packageID}" />
                                <f:setPropertyActionListener value="#{package.duration}" target="#{packageView.packageDuration}" />
                            </p:commandButton>


                        </h:panelGrid>
                    </p:panel>
                </p:column>
            </p:dataGrid>
        </h:form>

当订阅或取消订阅操作完成后,您应该通过其 ID 实现 DataGrid,即为 DataGrid 设置一个 ID,并将此 ID 放入按钮的更新 属性 中。 例如:

<p:dataGrid id="datalist" .../>

<p:commandButton action="#{packageView.Unsubscribe}" update="datalist" .../>

并且当提交按钮的操作时将包设置为空,因此当 DataGrid 的更新操作更新包时,应该再次调用持久性或数据库。

重要的是要考虑如何引用更新中的元素属性。 You can see this answer