我在 primefaces 上使用普通数据表,但同时使用 sortBy 和 filterBy 时出现错误:
javax.faces.FacesException:启用选择时,DataModel 必须实现 org.primefaces.model.SelectableDataModel。
我的桌子是这样的:
在第一张图片中,我们可以看到我是如何过滤表格的,但是如果我使用排序,则会出现错误:
这是我的primefaces代码:
<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>
如果我只是对数据表进行排序或过滤工作正常,则仅在同时使用两者时才会出现此错误。我调查了这个错误并发现了一些关于rowkey最独特的东西,是的,它是,所以我不知道它到底是什么,感谢任何帮助,问候。
更新
对象类 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 对象添加到列表中。