我在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()+" +++++++++++++++++++++++++++++++++++++++++");}
答案 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中修复。尝试升级到更新版本。