I am implementing the possibility to select several dates in a calendar and thus create recurring items on different dates. For this I show below the calendar a table with the selected dates, and this is why I need an event to detect when the selection of a date is removed (to update the lower table). I have tried with the onchange event but this is for inputs changes and it doesn't work because I need remove the selection from the calendar, and the onclick or dateSelect event doesn't detect it either.
<p:datePicker id="multiselect" locale="es"
selectionMode="multiple" value="#{altaSuceso.multi}" readonlyInput="true" mode="inline" mindate="#{listado.getFechaAct()}"
disabledDates="#{altaSuceso.invalidDates}">
<p:ajax event="dateSelect" listener="#{altaSuceso.onDateSelect}" update="formEdicion:fechasSuc"/>
</p:datePicker>
<p:dataTable id="fechasSuc" var="suc" value="#{altaSuceso.sucRecurrente}" >
<p:column headerText="Fecha de Inicio">
<h:outputText value="#{altaSuceso.getFechaFormateada(suc.fechaIniSuc)}" />
</p:column>
<p:column headerText="Fecha de Fin">
<h:outputText value="#{altaSuceso.getFechaFormateada(suc.fechaFinSuc)}" />
</p:column>
<p:column id="idInfoVialidad" headerText=""
styleClass="infoVialidad" style="width: 50px !important;"
resizable="false">
<p:commandButton id="moreInfoVialidad" icon="fa fa-fw fa-info" styleClass="btnGeneral btnGris"
type="button"
onclick="mostrarDialogoInfoVialidadAlta(event,'#{altaSuceso.mostrarVialidadesToolTip(suc.vialidades)}','tabla');"
onerror="onError();"/>
</p:column>
</p:dataTable>
AltaSuceso.java
public void onDateSelect(SelectEvent event) {
@SuppressWarnings("unchecked")
ArrayList<Date> f = (ArrayList<Date>) event.getObject();
calcularFechasNuevasVialidades(f.get(f.size()-1));
}
public void calcularFechasNuevasVialidades (Date fSelec) {
List<Date> listOfDatesIni = new ArrayList<Date>();
List<Date> listOfDatesFin = new ArrayList<Date>();
ArrayList<GrupoVialidades> listaNewVialidades = new ArrayList<>();
if(listaVialidades != null && listaVialidades.size() > 0)
for(GrupoVialidades v : listaVialidades) {
GrupoVialidades vialidadEdicion = new GrupoVialidades(v.isObligada(), v.isNueva(), (v.isOriginalmenteActiva()? Valores.ACT: Valores.INA));
BeanUtils.copyProperties(v, vialidadEdicion);
// El copyProperties copia no crea objetos nuevos para el ArrayList<VialidadGrupo>
// por lo que se llama a un método que genera los objetos nuevos
vialidadEdicion.setVialidades(new ArrayList<>());
vialidadEdicion.copyVialidades(v.getVialidades());
Date f = getFechaCalculada(fSelec, v.getFechaIni());
vialidadEdicion.setFechaIni(f);
listOfDatesIni.add(f);
if(v.getFechaFin() != null) {
Date f2 = getFechaCalculada(fSelec, v.getFechaFin());
vialidadEdicion.setFechaFin(f2);
if(f2 != null) listOfDatesFin.add(f2);
}
listaNewVialidades.add(vialidadEdicion);
}
Date fIniSuc = null;
Date fFinSuc = null;
if(listOfDatesIni != null && listOfDatesIni.size() > 0)
fIniSuc = Collections.min(listOfDatesIni);
if(listOfDatesFin != null && listOfDatesFin.size() > 0)
fFinSuc = Collections.max(listOfDatesFin);
SucesoRecurrente suc = new SucesoRecurrente();
suc.setFechaIniSuc(fIniSuc);
suc.setFechaFinSuc(fFinSuc);
suc.setVialidades(listaNewVialidades);
sucRecurrente.add(suc);
log.debug("calcularFechasNuevasVialidades "+sucRecurrente.size() + " "+ sucRecurrenteOriginal.size());
multi.add(fIniSuc);
}