1

で日付が選択された後に Bean を呼び出したいp:calendar。私のセットアップでは、@Named @ViewScopedBean があり、クラスObWithDate@Entity日付フィールドvalidFromです。

<h:form id="fUser">
  <p:dataTable id="dt" var="cum" value="#{myBean.listObWithDates}">
    <p:column>
      <p:calendar id="cValidFrom" value="#{cum.validFrom}">  
        <p:ajax event="dateSelect" listener="#{myBean.update(cum)}"
                update=":fUser:dt"/>  
      </p:calendar>  
    </p:column>
  </p:dataTable>
</h:form>

update(ObWithDate myO)良い点は、日付を選択するたびに正しいオブジェクトでBean メソッドが呼び出されることです。悪いことに、それmyO.validFromは正しい値を持っていません。常に一歩遅れています:

  • 2012-01-01 で初期化されたフィールド
  • GUI を 2012-01-05 に変更、Bean メソッドのデバッグを 2012-01-01 に変更
  • GUI を 2012-01-15 に変更、Bean メソッドのデバッグを 2012-01-05 に変更

この問題は私を夢中にさせます.正しく更新されていない値に関するいくつかの問題とp:calendar. それらのほとんどはselectListener="#{calendarBean.handleDateSelect}"handleDateSelect(DateSelectEvent event)メソッドで属性を使用することを提案しています。しかし、変数の現在のインスタンスを渡したいので、メソッドを呼び出したいと思います。

  • Firebug は、更新された正しい値が POST 要求で送信されることを確認します
  • Primefaces 3.2 と JBoss-7.1.1-Final を使用しています
  • なくても問題p:dataTableだけを使用しp:calendarても同じです。
  • method-Objectおよび の対応するエントリで、デバッグ出力の誤った値が確認される場合があります。update(ObWithDate myO)myBean.listObWithDates
  • <p:ajax immediate="true" .../>はこの問題を解決しません。

アップデートMattHandy は私を大いに助けてくれましたp:dataTable: How to get the row of p:ajax dateSelect eventのフォローアップJSF p:calendar で定式化されています。

4

2 に答える 2

3

これは、ライフサイクルの問題である可能性が最も高いです。フィールドのセッターは、リスナーが実行される前に呼び出されます。リスナーを使用して値を設定しないでください。

リスナーの el 式は、のリクエストのレンダリング レスポンス フェーズで評価されるため、 cum「1 ステップ遅れて」値を保持します。

カレンダーの日付値のセッターからカスタム オブジェクトを更新する必要があります。

于 2012-04-16T16:41:09.647 に答える
1

今日の朝、この問題に遭遇しました。Primefaces が Primefaces 3.5 から DateSelectEvent を削除したことがわかりました。したがって、カレンダー オブジェクトから ajax イベント呼び出しを削除する必要がありました。代わりに get..() を使用して値を取得します。以下のこのリンクで同じことについての議論を見つけてください。 http://forum.primefaces.org/viewtopic.php?f=3&t=27590

于 2013-06-03T17:04:22.003 に答える