Я использую обычные данные для простых символов, но при одновременном использовании sortBy и filterBy выдает ошибку:
javax.faces.FacesException: DataModel должен реализовывать org.primefaces.model.SelectableDataModel, когда выбор включен.
Вот так выглядит моя таблица:
На первом изображениимы можем видеть, как я фильтрую таблицу, но если я использую сортировку, появляется ошибка:
Это код моего простого лица:
<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 в список.