0

Primefaces ショーケース (バージョン 3.3.1 を使用) のスケジュール デモ コードをいじっています。move / resize イベント リスナーでスケジュールされた itens の値を微調整する必要があります。(「スケジュールされたアイテム」を使用して、データ モデル オブジェクト「スケジュールのイベント」に言及し、「イベント」という用語は、ユーザー インタラクションで API によってトリガーされる応答に予約します)。

したがって、ユーザーがインターフェース上でスケジュールされた項目を移動またはサイズ変更するたびに、登録されたイベント リスナーが起動し、ショーケースの例のように、その日の差分、分の差分メッセージが表示されます。

ただし、アイテムにいくつかの変更を加える必要があります。つまり、次のとおりです。

a) スケジュールされたアイテムが週末に開始/終了しないことを確認してください (休日でもありますが、これは無視してください)。アイテムの開始/終了を前の営業日に移動するか (週末に開始する場合)、または次の営業日に移動します (週末に終了する場合)。

b) 項目を最も近い 15 分の 1 時間にスナップします。

c) スケジュールされた項目が午前 7 時前または午後 21 時以降に開始/終了しないことを確認します。これらの制限を超えた場合、開始/終了時間をこれらの制限にスナップします。

結果の変更をユーザー インターフェイスに表示します。しかし、イベント リスナー メソッド中にデータ モデルを編集できません。

スケジュールタグは次のとおりです。

                    <p:schedule value="#{scheduleController.eventModel}"
                        widgetVar="myschedule" view="agendaWeek" allDaySlot="false"
                        slotMinutes="15" firstHour="7" showWeekends="FALSE"
                        leftHeaderTemplate="prev,next" rightHeaderTemplate=""
                        minTime="7am" maxTime="21pm" timeFormat="dd/MM H:mm{ - dd/MM H:mm}"
                        axisFormat="HH" timeZone="#{rotulo.timeZone}">

                        <p:ajax event="dateSelect"
                            listener="#{scheduleController.onDateSelect}"
                            update="eventDetails" oncomplete="eventDialog.show()" />
                        <p:ajax event="eventSelect"
                            listener="#{scheduleController.onEventSelect}"
                            update="eventDetails" oncomplete="eventDialog.show()" />
                        <p:ajax event="eventMove"
                            listener="#{scheduleController.onEventMove}" update="messages" />
                        <p:ajax event="eventResize"
                            listener="#{scheduleController.onEventResize}" update="messages" />

                    </p:schedule>

そして、マネージドBeanメソッド...

    public void onEventMove(ScheduleEntryMoveEvent event) {  
        doBusinessLogic((DefaultScheduleEvent) event.getScheduleEvent());
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event moved", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());  

        addMessage(message);  
    }  

    public void onEventResize(ScheduleEntryResizeEvent event) {  
        doBusinessLogic((DefaultScheduleEvent) event.getScheduleEvent());
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event resized", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());  

        addMessage(message);  
}  

doBusinessLogic()時間の値を微調整するのはこの内部DefaultScheduleEventです。スケジュールのデータ モデルに反映するためにそこで変更を行うにはどうすればよいですか?

4

1 に答える 1

1

コードは問題なく、データ モデルをデバッグすることで、ビジネス ロジックは実際にスケジュール アイテムを正しく更新しています。

問題はビューの更新にあります。p:ajax 呼び出しの update 属性は、eventDetails やメッセージだけでなく、フォーム全体である必要があります。

そのため、jsf ページを次のように変更します。

 <p:schedule value="#{scheduleController.eventModel}"
                        widgetVar="myschedule" view="agendaWeek" allDaySlot="false"
                        slotMinutes="15" firstHour="7" showWeekends="FALSE"
                        leftHeaderTemplate="prev,next" rightHeaderTemplate=""
                        minTime="7am" maxTime="21pm" timeFormat="dd/MM H:mm{ - dd/MM H:mm}"
                        axisFormat="HH" timeZone="#{rotulo.timeZone}">

                        <p:ajax event="dateSelect"
                            listener="#{scheduleController.onDateSelect}"
                            update="MYFORM" oncomplete="eventDialog.show()" />
                        <p:ajax event="eventSelect"
                            listener="#{scheduleController.onEventSelect}"
                            update="MYFORM" oncomplete="eventDialog.show()" />
                        <p:ajax event="eventMove"
                            listener="#{scheduleController.onEventMove}" update="MYFORM" />
                        <p:ajax event="eventResize"
                            listener="#{scheduleController.onEventResize}" update="MYFORM" />

                    </p:schedule>

イベントの変化を画面で見ることができました。

于 2012-11-16T16:28:11.840 に答える