jsf - <p :ajax event ="rowEditCancel"> on my primeface's datatable don't update datatable

标签 jsf jsf-2 primefaces datatable

我正在使用 Primefaces 的 p:dataTable 来显示一个可编辑的表格,我正在使用 p:rowEditor 添加或删除行,当添加一行时,我将一个对象添加到数据列表并更新数据表,这工作正常,但是当我取消编辑时,我删除了添加到数据表的对象,监听器被触发但它不更新数据表,请提出任何建议。 这是 .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);
}

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

最佳答案

我在这里找到了解决方法:PrimeFaces DataTable RowEditor updating cell elements on RowEditInit, but not on RowEdit or RowEditCancel

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

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

并将 p:remoteCommand 放在数据表之外:

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

关于jsf - <p :ajax event ="rowEditCancel"> on my primeface's datatable don't update datatable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20468308/

相关文章:

java - Primefaces 数据表单元格编辑不更新

jsf - JSF 的 MyFaces 与 Sun 引用实现

java - Primefaces selectbooleancheckbox 在列中不起作用

jsf - 如何获取 Primefaces 的 Filtered DataTable 字段中输入的值?

jsf - 填充 p :selectOneMenu based on another p:selectOneMenu in each row of a p:dataTable

java - 如何在带有转换器的 JSF View 中使用 java.sql.Timestamp

jsf - 将字符串参数从 xhtml 传递给函数或方法

jsf - 如何让JSF render 严格符合XHTML 1.0?

jsf - PrimeFaces 主题未正确应用于标准 JSF 控件

jsf-2 - 将静态 HTML(无效的 XHTML)文件包含到 JSF Facelets