0

私は再び :-( 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ビーンズメソッドが実行された後、値をオーバーライドしているとしか思えません。

4

0 に答える 0