使用可编辑DataTable中的Calendar组件编辑日期字段时,我遇到了一个奇怪的错误。要解释一下,我需要给你看一些照片。
首先,这是我正在使用的实际页面:
现在,让我们将列表中的日期1更改为2月13日,然后单击“确定”。
如您所见,表格会发生变化,但该行会占用另一行的数据。
除了在GUI中,更新已经很好了,如果我们重新加载页面,日期已在数据库中更新。这是刷新页面后表格的样子:
我已经完成了内部和外部的代码试图解决这个错误,我开始怀疑它是否是PrimeFaces本身的错误。我已经完成了整个工作流程,并得出结论,支持ArrayList始终具有正确的值。我想它可能与我在从数据库中获取列表并使用DataTable的sortBy属性时对列表进行排序有关。然而,在禁用两者之后,错误继续表现出来。
这是我的页面代码。谁能看到我做错了什么?如果是这样,你就是我的英雄=)
<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>
答案 0 :(得分:0)
事实证明,这个错误是由于各行中的数据大部分相同。
解决方案:将数据表上的rowKey属性设置为日期字段。现在无论是否进行排序都能正常工作。