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