我正在使用兩個日曆組件修改頁面,以選擇開始日期和結束日期。我應該讓他們檢查開始日期是否在結束日期之前,無論你何時修改它們;如果在結束後設置了開始或反之亦然,則代碼將結束日期更改爲最大日期並彈出警告。如何在更改後強制更新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組件。它只是顯示最後一個可見的值。 –