Ich habe eine PrimeFaces-Datentabelle erstellt, die gefiltert werden kann (siehe unten). Es funktioniert gut, aber jetzt habe ich versucht, die Möglichkeit zu erstellen, nach Start- und Enddatum zu filtern, Daten über den Kalender auszuwählen (es sollte Daten zwischen diesen beiden Daten finden; Startdatum/Enddatum beachten und Filterdatum oben) . Ich brauche es, um nach Start- und Enddatum zu filtern, so wie es nach allem anderen gefiltert wird.Filter p: dataTable nach Datumsbereich mit Seitennummerierung
Es wird über eine benutzerdefinierte Methode aufgerufen, aber es gibt nicht die richtigen Werte zurück, und am wichtigsten, wenn ich eine andere Seite auf dem Paginator auswählt, wird standardmäßig auf die ungefilterte Liste zurückgesetzt. Das ist so etwas wie eine Katastrophe. Ich möchte Hilfe, damit der Benutzer nach Start-/Enddatum als Teil des gesamten Filtersystems filtern kann. Momentan sind Start-/Enddatumsfelder Teil der Kopfzeile.
Ich dachte vielleicht, wenn die Filter Datumsfelder ändern die Liste (Bean-Eigenschaft) verwendet, um die Daten für die Tabelle (TableFiltered) zu ziehen, wird dies sicherstellen, dass die gezogenen Daten immer auf die richtigen Daten, die gefiltert worden sind. Aber so hat es nicht funktioniert. Ich verstehe nicht.
Innen home.xhtml
<p:outputPanel id="tableContainer">
<p:remoteCommand name="filterByDate" action="#{homeController.FilterByDate()}" update="tableContainer" />
<p:dataTable var="hbel" id="hbelList" value="#{homeController.tableFiltered}" rows="10"
paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,100,1000"
widgetVar="widgetTable"
tableStyle="width:auto">
<f:facet name="header">
<p:outputPanel>
<p:calendar id="calStartDate" value="#{homeController.startDate}" maxdate="#{homeController.endDate}" navigator="true" pattern="dd-MMM-yy" placeholder=" start date">
<p:ajax process="calStartDate" partialSubmit="true" event="change"/>
</p:calendar>
<p:calendar id="calEndDate" value="#{homeController.endDate}" maxdate="#{homeController.endDate}" navigator="true" pattern="dd-MMM-yy" placeholder=" end date">
<p:ajax process="calEndDate" partialSubmit="true" event="change"/>
</p:calendar>
<p:commandButton id="btnFilter" value="Filter Dates" ajax="true">
<p:ajax oncomplete="filterByDate()" />
</p:commandButton>
</p:outputPanel>
</f:facet>
<p:column filterStyle="width: 48px;" filterBy="#{hbel.batchId}" headerText="BatchID" filterMatchMode="exact">
<h:outputText value="#{hbel.batchId}" />
</p:column>
<p:column filterStyle="width: 48px;" filterBy="#{hbel.recordId}" headerText="RecordID" filterMatchMode="exact">
<h:outputText value="#{hbel.recordId}" />
</p:column>
<p:column filterBy="#{hbel.unitName}" headerText="UnitName" filterMatchMode="in">
<f:facet name="filter">
<p:selectCheckboxMenu label="Unit" onchange="PF('widgetTable').filter()" panelStyle="width:125px" scrollHeight="150">
<f:selectItem itemLabel="Location" itemValue="LOCATION"/>
<f:selectItem itemLabel="Unit" itemValue="UNIT" />
<f:selectItem itemLabel="Customer" itemValue="DIRECT_CUSTOMER" />
<f:selectItem itemLabel="Occupancy" itemValue="OCCUPANCY" />
<f:selectItem itemLabel="Bank Account" itemValue="BANK_ACCOUNT" />
</p:selectCheckboxMenu>
</f:facet>
<h:outputText value="#{hbel.unitName}" />
</p:column>
<p:column filterBy="#{hbel.logDate}" headerText="LogDate" filterMatchMode="exact">
<h:outputText value="#{hbel.logDate}" />
</p:column>
<p:column filterBy="#{hbel.logFlag}" headerText="LogFlag" filterMatchMode="in">
<f:facet name="filter">
<p:selectCheckboxMenu label="Flag" onchange="PF('widgetTable').filter()" panelStyle="width:125px" scrollHeight="150">
<f:selectItem itemLabel="Business" itemValue="B"/>
<f:selectItem itemLabel="Reconciliation" itemValue="R" />
<f:selectItem itemLabel="Technical" itemValue="T" />
<f:selectItem itemLabel="Warning" itemValue="W" />
</p:selectCheckboxMenu>
</f:facet>
<h:outputText value="#{hbel.logFlag}" />
</p:column>
<p:column filterBy="#{hbel.logFields}" headerText="LogFields" filterMatchMode="contains">
<h:outputText value="#{hbel.logFields}" />
</p:column>
<p:column filterBy="#{hbel.logReason}" headerText="LogReason" filterMatchMode="contains">
<h:outputText value="#{hbel.logReason}" />
</p:column>
</p:dataTable>
</p:outputPanel>
Innen homeController.java Bohne (Anfrage scoped)
// custom filtering
public void FilterByDate()
{
if (startDate != null &&
endDate != null)
{
// new dates (add start and end date to range)
Calendar c = Calendar.getInstance();
c.setTime(startDate);
c.add(Calendar.DATE, -1);
Date startDateMod = c.getTime();
c.setTime(endDate);
c.add(Calendar.DATE, 1);
Date endDateMod = c.getTime();
// reset table first
tableFiltered.clear();
// add legal items from tableFull
for (HubToBauExceptionLog hbel : tableFull)
{
if (hbel != null &&
hbel.getLogDate().after(startDateMod) &&
hbel.getLogDate().before(endDateMod))
{
tableFiltered.add(hbel);
}
}
}
}
Vielen Dank! Ich habe den dataTable-Parametern "filteredValue" hinzugefügt und außerdem den Bereich von homeController in die Anwendung geändert. Jetzt funktioniert es! – inappropriateCode