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

时间:2015-03-02 03:36:34

标签: jsf primefaces jsf-2.2

我有一个带有subscribe和unsubscribe选项的数据网格,因此用户可以订阅和取消订阅并使用vise verse。 现在我想在订阅或取消订阅后重新加载数据网格

我加载了网格数据

@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>

1 个答案:

答案 0 :(得分:2)

当一个suscribe或unsuscribe操作完成时,你应该通过它的ID来实现DataGrid,它是一个ID到DataGrid的ID,并将这个id放在按钮的update属性中。 例如:

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

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

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

考虑如何引用update属性中的元素非常重要。 You can see this answer