Фильтр и сортировка по времени, ошибка Primefaces Datatable - PullRequest
0 голосов
/ 09 февраля 2019

Я использую обычные данные для простых символов, но при одновременном использовании sortBy и filterBy выдает ошибку:

javax.faces.FacesException: DataModel должен реализовывать org.primefaces.model.SelectableDataModel, когда выбор включен.

Вот так выглядит моя таблица:

enter image description here

На первом изображениимы можем видеть, как я фильтрую таблицу, но если я использую сортировку, появляется ошибка:

enter image description here

Это код моего простого лица:

<p:dataTable value="#{lastPositionReportController.lastPositionReportDtos}"
                                         editable="true"
                                         paginator="true"
                                         paginatorPosition="bottom"
                                         paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {Exporters}"
                                         id="catalog_table"
                                         selectionMode="single"
                                         emptyMessage="Sin Registros por Mostrar"
                                         var="lastPos"
                                         rowKey="#{lastPos.gpsId}"
                                         rows="20"
                                         rowsPerPageTemplate="20,25,30"
                                         widgetVar="datatable"
                                         styleClass="tbl">
                                <f:facet name="{Exporters}">
                                    <div style="float:right">
                                        <h:commandLink immediate="true">
                                            <p:graphicImage name="img/xl.png" width="24"/>
                                            <pe:exporter type="xlsx" target="catalog_table"
                                                         postProcessor="#{lastPositionReportController.postProcessXLS}"
                                                         fileName="reporte_ultima_posicion"
                                                         facetBackground="#F88017"/>
                                        </h:commandLink>
                                    </div>
                                </f:facet>
                                <p:column headerText="Línea de Transporte" style="width: 10%;" sortBy="#{lastPos.transportLineName}"
                                          filterBy="#{lastPos.transportLineName}" exportable="true"
                                          filterMatchMode="contains">
                                    <f:facet name="header">
                                        Línea de Transporte
                                    </f:facet>
                                    <p:cellEditor>
                                        <f:facet name="output"><h:outputText value="#{lastPos.transportLineName}"/></f:facet>
                                        <f:facet name="input">
                                            <p:inputText value="#{lastPos.transportLineName}"></p:inputText>
                                        </f:facet>
                                    </p:cellEditor>
                                </p:column>
                                <p:column headerText="Número Económico" style="width: 10%;" sortBy="#{lastPos.economicNumber}"
                                          filterBy="#{lastPos.economicNumber}" exportable="true"
                                          filterMatchMode="contains">
                                    <f:facet name="header">
                                        Número Económico
                                    </f:facet>
                                    <p:cellEditor>
                                        <f:facet name="output"><h:outputText value="#{lastPos.economicNumber}"/></f:facet>
                                        <f:facet name="input">
                                            <p:inputText value="#{lastPos.economicNumber}"></p:inputText>
                                        </f:facet>
                                    </p:cellEditor>
                                </p:column>
                                <p:column headerText="GPS ID" style="width: 13%;" sortBy="#{lastPos.gpsId}"
                                          filterBy="#{lastPos.gpsId}" exportable="true"
                                          filterMatchMode="contains">
                                    <f:facet name="header">
                                        GPS ID
                                    </f:facet>
                                    <p:cellEditor>
                                        <f:facet name="output"><h:outputText value="#{lastPos.gpsId}"/></f:facet>
                                        <f:facet name="input">
                                            <p:inputText value="#{lastPos.gpsId}"></p:inputText>
                                        </f:facet>
                                    </p:cellEditor>
                                </p:column>
</p:dataTable>

Если я просто сортирую или фильтрую данные, все работает нормально, эта ошибка появляется только при использовании обоих одновременно. Я исследую ошибку и узнал кое-что о ключе строки , который наиболее уникален, и да, это так, , поэтому я не знаю точно, что это может быть, благодарен за любую помощь, с уважением.

UPDATE

Класс объекта lastPositionReportDto определен следующим образом:

package com.bsdenterprise.qbits.gps.manager.dtos.reports;
import lombok.Data;

@Data
public class LastPositionReportDto {
    private String transportLineName;
    private String economicNumber;
    private String gpsId;
    private String phoneNumber;
    private String distanceBetweenAhmsa;
    private String lastReportTimeStamp;
    private String timeFromLastReportHours;
    private String onRoad;
    private String status;
    private Long deviceId;
    private String uuid;
    private String conclusion;
    private double speed;
}

На моем контроллере я создаю только:

List LastPositionReportDto lastPositionReportDtos 

и добавьте объекты lastPositionsReportDtos в список.

1 Ответ

0 голосов
/ 11 февраля 2019
filteredValue="#{lastPositionReportController.selectedLastPositionReportDtosList}"

selection="#{lastPositionReportController.selectedLastPositionReportDtos}"

Обнаружено, что нужно добавить эти две строки в мою таблицу данных, объект списка и обычный объект, это устраняет ошибку фильтра и сортировку.

<p:dataTable value="#{lastPositionReportController.lastPositionReportDtos}"
                                         editable="true"
                                         paginator="true"
                                         paginatorPosition="bottom top"
                                         paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {Exporters}"
                                         id="catalog_table"
                                         selectionMode="single"
                                         emptyMessage="Sin Registros por Mostrar"
                                         var="lastPos"
                                         rowKey="#{lastPos.gpsId}"
                                         rows="20"
                                         filteredValue="#{lastPositionReportController.selectedLastPositionReportDtosList}"
                                         selection="#{lastPositionReportController.selectedLastPositionReportDtos}"
                                         rowsPerPageTemplate="20,25,30"
                                         widgetVar="datatable"
                                         styleClass="tbl">
<p:datatable>
...