过滤和排序时,Primefaces Datatable错误

过滤和排序时,Primefaces Datatable错误,primefaces,primefaces-datatable,Primefaces,Primefaces Datatable,我在primefaces上使用普通数据表,但同时使用sortBy和filterBy时出错: javax.faces.faces异常:启用选择时,数据模型必须实现org.primefaces.model.SelectableDataModel。 这是我的桌子的外观: 在第一幅图中,我们可以看到我是如何筛选表的,但如果使用排序,则会出现错误: 这是我的primefaces代码: <p:dataTable value="#{lastPositionReportController.lastP

我在primefaces上使用普通数据表,但同时使用sortBy和filterBy时出错:

javax.faces.faces异常:启用选择时,数据模型必须实现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>
在我的控制器上,我只创建一个:

List LastPositionReportDto lastPositionReportDtos 
并将lastPositionsReportDtos对象添加到列表中

filteredValue="#{lastPositionReportController.selectedLastPositionReportDtosList}"

selection="#{lastPositionReportController.selectedLastPositionReportDtos}"
发现需要将这两行添加到我的datatable中,一个list对象和一个normal对象,这修复了过滤器和排序的错误

<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>


LastPositionReportDTO的类型是什么?它需要修改。@JasperdeVries谢谢你的回复,我更新了我的问题以添加更多细节。当做
<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>