2012-11-16 48 views
0

我與schedule demo code from the primefaces showcase(使用版本3.3.1)擺弄,我需要調整計劃itens的一些價值觀上移動/調整事件偵聽器。 (我將使用「計劃項目」來提及數據模型對象「計劃的事件」,併爲API觸發的用戶交互響應保留術語「事件」)。primefaces安排:在移動編輯事件細節/調整事件偵聽器

所以在界面上每當用戶移動/調整大小的調度的項目,註冊事件偵聽器火災,示出了當天增量,增量分鐘消息,如陳列櫃示例那樣。

但我需要做的關於該項目的一些修改,即:

一)確保計劃的項目不上開始了爲期一週的結束日(假期也/結束,但讓我們忽略這個)。將項目的開始/結束向後或向前移動到上一個工作日(如果它開始於週末)或移動到下一個工作日(如果它在週末結束)

b)使項目捕捉到最近的一刻鐘。

三)確保計劃的項目沒有開始700點之前或之後2100pm /結束。如果超過這些限制,則將開始/結束小時對齊到這些限制。

並在用戶界面上顯示結果更改。但是我無法在事件偵聽器方法中編輯數據模型。

這裏的時間表標籤:

    <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(),我會調整我values.How可以得到的時間內在那裏對DefaultScheduleEvent所做的更改反映在計劃的數據模型上?

+0

一些研究認爲可能與在手的問題:http://forum.primefaces.org/viewtopic.php?f=3&t=17675 http://stackoverflow.com/questions/12818052/primefaces-schedule- component-eventmove-issue – Mindwin

回答

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> 

我能看到屏幕上的事件的變化。

+0

該解決方案還引發了爲什麼監聽器響應不會使用事件偵聽器的代碼中修改的數據更新視圖,而是使用其他數據代替的問題。也許這與JSF階段有關,但它超越了我。 – Mindwin