私は再び :-( a の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
ただし、変更が発生したテーブルの行には、実際に変更された値が常に含まれていますが (画像を参照)、別の行に属している必要があります (並べ替えのため)。
3 行目の日付 (object.id=147) が 05.04.12 から 20.04.12 に変更されました。更新後、変更された日付は最初の位置にあります (これで問題ありません)。しかし、3 行目には id=141 の変更されていない日付が含まれておらず、新しいデータ (20.04.12) が保持されています。
興味深いことに、h:outputText にも間違った日付が含まれています。p:calendar
ビーンズメソッドが実行された後、値をオーバーライドしているとしか思えません。