0

PrimeFaces のカレンダー コンポーネントを使用します。

    <p:calendar id="hotelCalendar"
                mode="inline"
                beforeShowDay="disableDates" 
                pages="1">
        <p:ajax event="dateSelect" listener="#{apartments.handleDateSelect}" 
              oncomplete="loadDisabledDates();" update="hotelCalendar"/>
    </p:calendar>

ロジック: ユーザーが日付をクリックすると、バックエンドはこの日付を処理し、無効に設定する必要があります。そのカレンダーがバックエンドから (ajax リクエストを使用して) 無効な日付の更新された配列を受け取った後、すべての日付を (beforeShowDay を使用して) リロードし、異なる色でマークします。利用可能 - 緑、無効 - 赤。

問題: カレンダーはイベントのupdate直後に実行されます。dateSelectそのため、次のクリックまで現在の変更が表示されません。

質問:

  1. loadDisabledDates()jsの完了後に更新を強制的に実行するにはどうすればよいですか?
  2. そのような機能を実現する他の方法はありますか? おそらくCalendarコンポーネントをBeanにバインドしていますか?
4

1 に答える 1

3

oncomplete確かに後に実行されますupdate。なぜ逆のことを期待したのかわかりませんが、ドキュメントには明確にそう書かれています。

基本的に、これはイベントの呼び出し順序です。

  • onclickハンドラが呼び出されます
  • ajaxリクエストは、に基づくフォームデータで準備されますprocess
  • onbeginハンドラが呼び出されます
  • ajaxリクエストが送信されます
  • ajax レスポンスが正常に取得されました (HTTP ステータス コードは 200)。
  • onsuccessハンドラが呼び出されます
  • ajax の更新は、に基づいて HTML DOM で実行されます。update
  • oncompleteハンドラが呼び出されます

そのため、ajax 応答を実行した後、HTML DOM を更新する前に何らかのスクリプトを実行したい場合は、onsuccess代わりにoncomplete.

于 2013-08-02T12:21:42.053 に答える