p:日期值未使用dateSelect更新

时间:2013-05-08 10:10:04

标签: primefaces calendar

我在p:对话框中有一个p:calendar组件。当显示对话框时,它从back bean中的属性获取其值,但是当选择新日期时,到达侦听器的SelectEvent将带来旧值而不是新选择的日期。下一个代码出了什么问题?

   <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()+" +++++++++++++++++++++++++++++++++++++++++");}

4 个答案:

答案 0 :(得分:1)

p:calendar位于h:form内?

我们遇到了完全相同的问题并注意到我们忘了这个

答案 1 :(得分:0)

当您在ajax调用中调用listner时,我不知道您在valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}"中使用p:calender的原因。 只需从valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}"中删除p:calender,然后在listener="#{schedulePFController.cambiaHoraComienzo}"代码中使用的check.listener p:ajax已足够

答案 2 :(得分: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>

您需要为beginn设置getter / setter,当您调用方法"reclacDate()"时,您可以使用beginn,我很确定您将拥有新日期。

答案 3 :(得分:0)

这似乎是PrimeFaces旧版本的一个问题。这已在PrimeFaces 3.3或3.3.1中修复。尝试升级到更新版本。