我又遇到了:-(一个奇怪的问题,p:calendar
里面有一个p:dataTable
:
<h:form id="fId">
<p:dataTable var="cum" value="#{myBean.list}">
<p:column>
<p:calendar value="#{cum.validFrom}">
<p:ajax update=":fId" event="dateSelect" listener="#{myBean.upDateCum}"/>
</p:calendar>
</p:column>
<p:column>
<h:outputText value="#{cum.validFrom}"/>
</p:column>
</p:dataTable>
</h:form>
bean 中的方法是获取发生更新的正确元素(JSF p:calendar in p:dataTable: How to get the row of p:ajax dateSelect event)然后元素中的日期被更新并list
重新排序。可以在方法末尾的 bean 中验证正确的排序和更新upDateCum
:
public void upDateCum(DateSelectEvent event)
{
// Logging Before (iteration over list, debugging id and date)
// set date with provided date from event
// Logging After (iteration over list, debugging id and date)
}
20:53:10,455 INFO [myBean] Before id:148 -- 2012-04-15
20:53:10,456 INFO [myBean] Before id:141 -- 2012-04-10
20:53:10,456 INFO [myBean] Before id:147 -- 2012-04-05
20:53:10,823 INFO [myBean] After id:147 -- Fri Apr 20 00:00:00 CEST 2012
20:53:10,823 INFO [myBean] After id:148 -- 2012-04-15
20:53:10,823 INFO [myBean] After id:141 -- 2012-04-10
但是发生更改的表的行始终包含实际更改的值(见图),但现在应该属于另一行(因为重新排序)。
第三行 (object.id=147) 中的日期从 05.04.12 更改为 20.04.12。更新后,更改的日期位于第一个位置(没关系)。但是第三行不包含 id=141 的未更改日期,它包含新数据(20.04.12):
有趣的是: h:outputText 还包含错误的日期。我只能假设p:calendar
bean 方法执行后覆盖了该值。