estoy usando primefaces 10 tabla de datos
y estoy tratando de filtrar en la columna java.util.date de la siguiente manera:
<p:column field="dateCreated" headerText="Request Date" filterMatchMode="range"> <f:facet name="filter"> <p:datePicker widgetVar="dateFilterWidget" pattern="yyyy/MM/dd" selectionMode="range" onchange="dateFilterChange();"> <f:convertDateTime type="date" dateStyle="short" pattern="yyyy/MM/dd" /> </p:datePicker> </f:facet> <h:outputText value="#{requestItem.dateCreated}"> <f:convertDateTime pattern="yyyy/MM/dd hh:mm aa" locale="ar"/> </h:outputText> </p:column>PROBLEMA: el filtro funciona como fecha > = fecha de inicio y fecha < fecha de finalización
y quiero que funcione como: fecha >= fecha de inicio y fecha <= fecha de finalización
Ejemplo: tengo una solicitud creada el 1 de octubre y una solicitud creada el 7 de octubre si elijo el rango de:
2021/10/01 - 2021/10/07 la solicitud del 2021/10/07 no aparece en el resultado del filtro
así que traté de hackear el código de la siguiente manera:
function dateFilterChange(){ var datePicker = PF('dateFilterWidget'); console.log(datePicker.getDate()); if(datePicker.getDate() && datePicker.getDate().length == 2 && datePicker.getDate()[1]!= null){ var endDate = datePicker.getDate()[1]; endDate.setHours(23, 59, 59); console.log('endDate :'+endDate); } console.log(datePicker.getDate()); PF('inboxTableWidget').filter(); }pero sigue obteniendo el mismo resultado.
También puede optar por encargarse de esto en el lado del servidor.
El filtro de rango es manejado por org.primefaces.model.filter.RangeFilterConstraint . Puede sobrecargar esta clase en su proyecto y modificar el método isInRange para verificar las Date de la forma que desee.
O, si está utilizando un LazyDataModel , simplemente actúe en el org.primefaces.model.FilterMeta proporcionado de MatchMode RANGE .