2013-05-08 31 views
0

我在p:對話框中有一個p:calendar組件。當顯示對話框時,它從後端bean的屬性中獲取它的值,但是當選擇新的日期時,到達偵聽器的SelectEvent會帶來舊值而不是新的選定日期。下一個代碼有什麼問題?p:日曆值未用日期更新選擇

<p:dialog id="eventDialog" widgetVar="eventDialog" header="#{textos.confirmarFechaHora}" showEffect="clip" 
     hideEffect="clip" modal="true" 
     appendToBody="true"> <!-- A false, no entran los eventos tras modificar la fecha/hora del calendario --> 
    <h:panelGrid id="eventDetails" columns="2"> 
    <h:outputLabel for="calHora" value="#{textos.horaComienzo}" /> 
    <p:calendar id="calHora" locale="es" pattern="dd/MM/yyyy HH:mm" 
       value="#{schedulePFController.fechaComienzo}" mode="inline" 
       required="true" 
       accesskey="true" valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}"> 
     <p:ajax event="dateSelect" listener="#{schedulePFController.cambiaHoraComienzo}"/> 
    </p:calendar> 
    <p:commandButton value="#{textos.cancelar}" oncomplete="eventDialog.hide();"/> 
    <p:commandButton value="#{textos.mostrarCitas}" 
         action="#{schedulePFController.verEntradaCalendario}" 
         rendered="#{schedulePFController.clickedOnCita}"/> 
    <p:commandButton value="#{textos.addCita}" 
         action="#{schedulePFController.addCita}" 
         rendered="#{!schedulePFController.clickedOnCita}"/> 
    </h:panelGrid> 

public void cambiaHoraComienzo(SelectEvent ev) { 
    Date date = (Date)ev.getObject(); 
    fechaComienzo = date; 
    horaComienzo = new DateCita(date); 
    logger.debug("Cambiando fechaComienzo "+horaComienzo.toString()+" +++++++++++++++++++++++++++++++++++++++++");} 
+0

你初始化'SchedulePFController'屬性'fechaComienzo'任何默認值? – Freak 2013-05-08 10:12:47

+0

哦,我只是看到'valueChangeListener =「#{schedulePFController.cambiaHoraComienzoVCL}」'在這裏你調用另一種方法,你正在'cambiaHoraComienzo'方法看價值嗎?你在做什麼呀? – Freak 2013-05-08 10:14:51

+1

從'p:calender'中刪除'valueChangeListener =「#{schedulePFController.cambiaHoraComienzoVCL}'',然後在'p:ajax'標籤中使用的check.listener listener =」#{schedulePFController.cambiaHoraComienzo}「是足夠 – Freak 2013-05-08 10:16:36

回答

0

我不知道你爲什麼在p:calender使用valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}"當你已經調用你的Ajax調用一個聽者。
只需從p:calender刪除valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}"然後check.listener listener="#{schedulePFController.cambiaHoraComienzo}"您使用在p:ajax標籤足夠

+0

謝謝你的幫助。 valueChangeListener沒有被調用。我曾嘗試過,沒有它。被調用的唯一偵聽器是p:ajax事件dateSelect的偵聽器,但事件到達並沒有選擇新的日期 – 2013-05-08 12:29:32

0

你這個做了錯誤的方式,複雜的。

到這裏看看:

 <p:calendar value="#{ivkDaten.beginn}" locale="de" lang="de" 
      pattern="dd.MM.yyyy" label="#{messages['services.ivk.beginn']}:" 
      width="80" id="ivkbeginn" effect="fadeIn" readonlyInput="true" disabled="true" 
      showOn="button" mindate="#{services.minDate}" maxdate="#{services.maxDate}"> 

      <p:ajax event="dateSelect" listener="#{ivkDaten.recalcDate()}" 
       update="ablauf" /> 
     </p:calendar> 

您需要設置的getter/setter爲beginn,當你調用"reclacDate()"可以使用beginn的方法,我敢肯定,你將有新的日期。

+0

是的,我初始化了fechaComienzo,然後這是SelectEvent的值,即使我選擇了另一個日期 – 2013-05-08 11:45:56

+0

你甚至不需要使用SelectEvent。只需調用你的方法'public void cambiaHoraComienzo(){...}'。就像這樣使用''。 – leostiw 2013-05-08 12:09:02

+0

當recalcDate被調用時,beginn不會被更新爲新的日期 – 2013-05-08 12:10:58

0

這似乎是舊版PrimeFaces的問題。這已在PrimeFaces 3.3或3.3.1中修復。嘗試升級到更新的版本。

1

This p:calendar is within a h:form

我們有完全相同的問題,並指出,我們已經忘記了這一點