我的PrimeFaces数据表中的<p:ajax event="rowEditCancel">不更新数据表。

3

我正在使用Primefaces的p:dataTable来显示可编辑表格,同时我正在使用p:rowEditor来添加或删除行。当我添加一行时,我会向数据列表中添加一个对象并更新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>

以下是“保存”方法。直到现在,一切都很顺利,我已经添加了对象并更新了数据表:

public void createusr(ActionEvent event) {
        UserDTO usr = new UserDTO();
        listusr.add(0, usr);            
}

这里是 onCancel 监听器:

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

监听器被触发,对象被删除,但如果datatable未更新,则不会删除该行,而是会复制第二行。

请问您能否提供一个真正的SSCCE来说明您的问题?这样可以使代码易于复制粘贴并且可运行。这里有一个例子 - Aritz
应该改为listusr.remove(0)而不是list.remove(0)吗? - Mr.J4mes
是listusr.remove(0),但我仍然遇到同样的问题,监听器已被触发,但数据表并没有更新。 - RMDeveloper
我也遇到了同样的问题。奇怪的是,当我从rowEditCancel事件更新整个表单时,dataTable会失去所有数据和样式。 - jmoran
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接