Jsf <;p:ajax事件=";“行编辑取消”&燃气轮机;在我的脸上';s数据表don';更新数据表

Jsf <;p:ajax事件=";“行编辑取消”&燃气轮机;在我的脸上';s数据表don';更新数据表,jsf,jsf-2,primefaces,datatable,Jsf,Jsf 2,Primefaces,Datatable,我使用Primefaces的p:dataTable来显示一个可编辑的表,我使用p:rowEditor来添加或删除行,当添加行时,我向datalist添加一个对象并更新dataTable,这可以正常工作,但当我取消编辑时,我将添加的对象删除到dataTable,侦听器被触发,但它不会更新dataTable,有什么建议吗。 下面是.xhtml: <h:form id="Users"> <p:dataTable id="datalist"

我使用Primefaces的p:dataTable来显示一个可编辑的表,我使用p:rowEditor来添加或删除行,当添加行时,我向datalist添加一个对象并更新dataTable,这可以正常工作,但当我取消编辑时,我将添加的对象删除到dataTable,侦听器被触发,但它不会更新dataTable,有什么建议吗。 下面是.xhtml:

<h:form id="Users">
            <p:dataTable id="datalist"
                    value="#{beanController.listusr}" var="item"
                    selectionMode="single" editable="true"
                    styleClass="datalistdisplayusr"
                    selection="#{beanController.selectedusr}"
                    rowKey="#{item.usrId}"
                    paginator="true" rows="5" rowsPerPageTemplate="5,10,15">
                    <f:facet name="header">
                        <p:commandButton id="newusrButton" icon="ui-icon-plus"
                            value="Create"
                            actionListener="#{beanController.createusr}"
                            update=":Users:datalist" 
                            oncomplete="$('.datalistdisplayusr .ui-datatable-data .ui-row-editor .ui-icon-pencil').first().click();"
                            />
                    </f:facet>

                    <p:ajax event="rowEdit"
                        listener="#{beanController.saveusr}"
                        update=":Users:datalist" />
                    <p:ajax event="rowEditCancel"
                        listener="#{beanController.onCancel}"
                        update=":Users:datalist" />

                    <p:column style="width:6%">
                        <p:rowEditor />
                    </p:column>
                    <p:column >
                        <f:facet name="header">
                            <h:outputText value="Id" />
                        </f:facet>

                        <p:cellEditor>
                            <f:facet name="output">
                                <h:outputText value="#{item.usrId}" />
                            </f:facet>
                            <f:facet name="input">
                                <p:inputText id="Id" value="#{item.usrId}"   />
                            </f:facet>
                        </p:cellEditor>
                    </p:column>
                    <p:column >
                        <f:facet name="header">
                            <h:outputText value="First Name" />
                        </f:facet>
                        <p:cellEditor>
                            <f:facet name="output">
                                <h:outputText value="#{item.usrName}" />
                            </f:facet>
                            <f:facet name="input">
                                <p:inputText id="FirstName" value="#{item.usrName}"  />
                            </f:facet>
                        </p:cellEditor>
                    </p:column>
                    <p:column >
                        <f:facet name="header">
                            <h:outputText value="Last Name" />
                        </f:facet>
                        <p:cellEditor>
                            <f:facet name="output">
                                <h:outputText value="#{item.usrSurName}" />
                            </f:facet>
                            <f:facet name="input">
                                <p:inputText id="SurName" value="#{item.usrSurName}" />
                            </f:facet>
                        </p:cellEditor>
                    </p:column>
                </p:dataTable>
以下是onCancel侦听器:

public void onCancel(RowEditEvent event){ 
         list.remove(0);
}

监听器被触发,对象被我删除。datatable没有更新,我没有删除行,而是复制了第二行。

我在这里找到了一个解决方法:

基本上,它包括在p:ajax的oncomplete属性中添加一个p:remoteCommand:

<p:ajax oncomplete="updateDataTable()" event="rowEditCancel" listener="#{beanView.onRowEventCancelMethod}" global="false" process="@this"/>

并将p:remoteCommand置于dataTable之外:

<p:remoteCommand name="updateDataTable" update="myDataTableId"/>


请提供您的问题的真实答案?这样可以使代码副本粘贴并可运行。这里有。它应该是
listusr.remove(0)
而不是
list.remove(0)
?是的,它是listusr.remove(0),但我仍然有同样的问题,侦听器被触发,但数据表没有更新。我也有同样的问题。奇怪的是,当我从rowEditCancel事件更新整个表单时,dataTable会丢失所有数据和样式。
<p:remoteCommand name="updateDataTable" update="myDataTableId"/>