Primefaces 在DataTable组件中编辑日期字段时出现错误

Primefaces 在DataTable组件中编辑日期字段时出现错误,primefaces,Primefaces,在可编辑数据表中使用日历组件编辑日期字段时,我遇到了一个奇怪的错误。为了解释,我需要给你看一些照片 首先,这是我工作的实际页面: 现在,让我们将列表中的日期1更改为2月13日,然后单击“确定” 如您所见,表发生了变化,但行接受了另一行的数据 除了在GUI中,更新进展顺利,如果我们重新加载页面,数据库中的日期已经更新。这是刷新页面后表格的外观: 我已经把代码内外翻了一遍,试图找出这个bug,我开始怀疑它是否是PrimeFaces本身的bug。我已经完成了整个工作流程,并得出结论,支持Arr

在可编辑数据表中使用日历组件编辑日期字段时,我遇到了一个奇怪的错误。为了解释,我需要给你看一些照片

首先,这是我工作的实际页面:

现在,让我们将列表中的日期1更改为2月13日,然后单击“确定”

如您所见,表发生了变化,但行接受了另一行的数据

除了在GUI中,更新进展顺利,如果我们重新加载页面,数据库中的日期已经更新。这是刷新页面后表格的外观:

我已经把代码内外翻了一遍,试图找出这个bug,我开始怀疑它是否是PrimeFaces本身的bug。我已经完成了整个工作流程,并得出结论,支持ArrayList始终具有正确的值。我想这可能与我在从数据库获取列表和使用DataTable的sortBy属性时对列表进行排序有关。但是,在禁用这两个选项后,错误会继续显现出来

这是我的页面代码。有人能看出我做错了什么吗?如果是这样,你就是我的英雄=)


更改日期
只是这里的搜索内容。。。

事实证明,此错误是由于各行中的数据基本相同造成的

解决方案:将datatable上的rowKey属性设置为date字段。现在不管有没有排序,它都可以正常工作

<ui:composition template="/WEB-INF/standard-page-template.xhtml">
<ui:define name="title">Change Dates</ui:define>
<ui:define name="content">

    <p:panel header="Change dates" style="width:760px">
        <h:form>

            <p:panel>
                    Just the search stuff here...
            </p:panel>
            <p:panel header="Search">
                    <h:panelGrid columns="1">
                    <p:dataTable id="listDatesTable" value="#{view.dateWrappers}" var="wrapper"
                                 rowIndexVar="index" editable="true"
                                 emptyMessage="Search for an ID above">

                        <p:ajax event="rowEdit" listener="#{changePublishDateView.changeDate}"/>

                        <p:column headerText="Dragning" width="90">
                            <h:outputText value="#{wrapper.id}"/>
                        </p:column>

                        <p:column headerText="Beskrivning" width="180">
                            <h:outputText value="#{wrapper.description}"/>
                        </p:column>

                        <p:column headerText="Distribution" width="100">
                            <h:outputText value="#{wrapper.id2}"/>
                        </p:column>

                        <p:column headerText="Publiceringstid" width="170" styleClass="#{view.duplicateDateInRow(wrapper)}">
                            <p:cellEditor>
                                <f:facet name="output">
                                    <h:outputText value="#{wrapper.newhDate}">
                                        <f:convertDateTime pattern="yyyy-MM-dd HH:mm"/>
                                    </h:outputText>
                                </f:facet>
                                <f:facet name="input">
                                    <p:calendar
                                            mindate="#{view.minDate}" stepMinute="30" minHour="8" maxHour="22"
                                            pattern="yyyy-MM-dd HH:mm" value="#{wrapper.newDate}"/>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>

                        <p:column width="50">
                            <p:rowEditor/>
                        </p:column>
                    </p:dataTable>
                </h:panelGrid>
            </p:panel>
        </h:form>
    </p:panel>
</ui:define>