我再次:-( 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
。可以在upDateCum
方法结束时在bean中验证正确的排序和更新:
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也包含错误的日期。我只能假设执行bean方法后p:calendar
覆盖了该值。