我正在使用两个日历组件修改页面,以选择开始日期和结束日期。我应该让他们检查开始日期是否在结束日期之前,无论你何时修改它们;如果在结束后设置了开始或反之亦然,则代码将结束日期更改为最大日期并弹出警告。如何在更改后强制更新Primefaces日历Ajax事件验证新值?
事件侦听器运行正常,但结束日期日历无法更新以反映新值;这并不是它在听众更改值之前更新 - 它根本无法更新。
该项目在Primefaces 5.3和Java 1.6上运行。这是XHTML(减去样式可读性):
<p:outputPanel id="fl83">
<p:outputPanel id="fl83c3">
<h:outputLabel value="Start date" for="fechaInicioMP" />
<p:calendar locale="es" pattern="dd/MM/yyyy" id="fechaInicioMP"
maxdate="#{filtroFechasBB.fechaMaxFin}" value="#{filtroFechasBB.fechaInicio}"
onSelectUpdate=":f183" >
<p:ajax event="blur" />
<f:ajax event="change" listener="#{filtroFechasBB.fechaInicioTextChange}"
render="@this" update="@form" />
<p:ajax event="dateSelect" listener="#{filtroFechasBB.fechaInicioClickChange}"
update="@form" />
</p:calendar>
</p:outputPanel>
<p:outputPanel id="fl83c4">
<h:outputLabel value="End date" for="fechaFinMP" />
<p:calendar locale="es" pattern="dd/MM/yyyy" id="fechaFinMP"
maxdate="#{filtroFechasBB.fechaMaxFin}" value="#{filtroFechasBB.fechaFin}"
onSelectUpdate=":f183" >
<p:ajax event="blur" />
<f:ajax event="change" listener="#{filtroFechasBB.fechaFinTextChange}"
render="@this" update=":fl83" />
<p:ajax event="dateSelect" listener="#{filtroFechasBB.fechaFinClickChange}"
update=":fl83" />
</p:calendar>
</p:outputPanel>
</p:outputPanel>
而这些听众:
public void fechaFinTextChange() {
if(fechaFin.after(fechaMaxFin)) {
fechaFin = fechaMaxFin;
addErrorMessage(FFIN_AFTER_FMAX);
}
compareInicioBeforeFin();
}
public void fechaFinClickChange(SelectEvent event) {
setFechaFin((Date)event.getObject()); // I couldn't find out why this is here given that
// the setter has already been called
compareInicioBeforeFin();
if (updateMetodoEntreBB != null) {
ajaxActualiza(event, OpcionesAjax.F_FIN);
}
}
// fechaInicioTextChange and fechaInicioClickChange do pretty much the same as these two
private void compareInicioBeforeFin() {
if(fechaInicio.after(fechaFin)) {
fechaFin = fechaMaxFin;
addErrorMessage(FINI_AFTER_FFIN);
}
}
有两种阿贾克斯事件,因为当你点击的JSF更改事件不触发日历和PrimeFaces dateSelect不会触发当您键入日期英寸
我试过onSelectUpdate从日历和渲染和更新从这两个ajax事件,将它们设置为@this,@form,结束日期日历的ID,两个日历的ID,日历outputPanel的ID和公共的outputPanel的ID,以及该死的日历只是。不会更新。
我在我的智慧'结束,我的Google Fu没有找到任何可行的解决方案。
试过了,将该设置的endDate设置为null并不能帮助我刷新p:calendar组件。它只是显示最后一个可见的值。 –