【问题标题】:p:calendar value not updated with dateSelectp:日历值未使用 dateSelect 更新
【发布时间】:2013-05-08 10:10:03
【问题描述】:

我在 p:dialog 中有一个 p:calendar 组件。 When dialog is shown it takes its value from property in back bean, but when a new date is selected, the SelectEvent arrived to the listener brings the old value and not the new selected date.下一个代码有什么问题?

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

【问题讨论】:

  • 你有没有用任何默认值初始化SchedulePFController属性fechaComienzo
  • 哦,我刚刚看到valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}" 在这里你正在调用另一个方法,你正在寻找cambiaHoraComienzo 方法的价值?你在做什么?
  • 从您的p:calender 中删除valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}",然后检查您在p:ajax 标签中使用的listener="#{schedulePFController.cambiaHoraComienzo}" 就足够了
  • 这似乎是旧版本 PrimeFaces 的问题。这已在 PrimeFaces 3.3 或 3.3.1 中修复。尝试升级到新版本。
  • 我也有同样的问题,无法升级大项目...

标签: primefaces calendar


【解决方案1】:

当您已经在 ajax 调用中调用侦听器时,我不知道您为什么在 p:calender 中使用 valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}"
只需从您的p:calender 中删除valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}",然后检查您在p:ajax 标签中使用的listener="#{schedulePFController.cambiaHoraComienzo}" 就足够了

【讨论】:

  • 感谢您的帮助。没有调用 valueChangeListener。我试过有和没有它。唯一调用的监听器是 p:ajax 事件 dateSelect 的监听器,但是到达的事件没有选择新的日期
【解决方案2】:

你做错了,太复杂了。

看这里:

        <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,我很确定您会有新的日期。

【讨论】:

  • 是的,我已经初始化了 fechaComienzo,然后这是 SelectEvent 附带的值,即使我选择了另一个日期
  • 你甚至不需要使用 SelectEvent。只需调用您的方法 public void cambiaHoraComienzo() { ... } 。像这样使用&lt;p:ajax event="dateSelect" listener="#{schedulePFController.cambiaHoraComienzo()}" /&gt;
  • 调用 recalcDate 时,beginn 不会更新为新日期
  • 它应该,如果你做的一切正确。你用什么范围?
  • bean schedulePFController 的会话范围
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    这个p:calendarh:form 内?

    我们遇到了完全相同的问题,并指出我们忘记了这一点

    【讨论】:

      猜你喜欢
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2013-06-17
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      相关资源
      最近更新 更多