执行远程命令后 Primefaces 网格未更新

Primefaces grid was not updated after executing remote command

我有一个数据表,其中包含列过滤器和删除行的选项。当 table 处于初始状态时,如果我删除行,则 table 会更新。如果我应用过滤器并删除显示的行之一,过滤的结果将保留,直到我刷新页面或更改过滤器。

代码如下:

<h:form id="form">
    <p:dataTable id="tdataTable" var="tdata" value="#{oemModel.models}" widgetVar="oemModelsTable" editable="true" editMode="cell"
                scrollable="true" scrollHeight="500" paginator="true" rows="15" 
                             emptyMessage="No tdatas found with given criteria" filteredValue="#{oemModel.filteredOemModels}">
    </p:dataTable>

               <p:dialog id="deleteModelDialog" header="Delete " widgetVar="deleteDialog" appendTo="@(body)" showEffect="fade" hideEffect="fade" height="150" width="350" modal="true" resizable="false" >
                    <h:panelGroup id="deleteModelPanel">
                        <div align="center">
                            <h:outputText value="Are you sure?" />
                            <p>
                                <h:panelGrid columns="2">
                                    <p:commandButton value="Yes" icon="ui-icon-check" onclick="PF('waitDialog').show();deleteModel();" />
                                    <p:commandButton value="No" icon="ui-icon-close" onclick="PF('deleteDialog').hide()"/>
                                </h:panelGrid>
                            </p>
                        </div>
                    </h:panelGroup>
                </p:dialog>

                <p:remoteCommand name="deleteModel" update="tdataTable" actionListener="#{bBean.deleteModel}" oncomplete="PF('waitDialog').hide();PF('deleteDialog').hide();"/>
 </h:form>

在 backingBean 中,我将其从数据库中删除,然后再次加载数据:

public void deleteModel() {
        try {
            service.deleteOemModel(selectedModel.getId());
            models= service.getOemModels();
        } ...
    }

其中模型是绑定列表。

有什么提示吗?我试图更改 remotecommand 的更新属性,以更新整个表单,但没有任何帮助。

您必须重新过滤,因为过滤器已缓存。 如本例所述 Ajax update doesn't work, when using filter on p:dataTable 你应该试试:

<p:remoteCommand name="deleteModel" update="tdataTable" actionListener="#{bBean.deleteModel}" oncomplete="PF('waitDialog').hide();PF('deleteDialog').hide(); PF('oemModelsTable').filter()"/>

尝试使用 PF 和不使用 PF,我现在不喜欢 Primefaces :D