我在Primefaces数据表组件中包含了自定义排序字符串和数字类型的方法调用。非惰性数据表的排序在当前情况下运行良好。但是当我切换到延迟加载时,自定义排序方法不会被调用(正确调试),尽管我有所需的加载实现,并且我可以延迟加载我的数据而没有任何缺陷。由于我自己的方法没有被调用,因此PF自己的排序机制确实会发生排序错误。它对数据进行排序,但是对于我们字母表中的外来字符有麻烦,数字也被视为字符串等。
问题是:如何通过延迟加载使我自己的排序函数正确调用?
我正在使用Primefaces 5.0,JSF 2.2 Mojarra,JDK 1.7,WebLogic服务器
p.s:省略了偏离主题的属性(过滤器等)。
<p:dataTable id="resourceDataTable" var="result" widgetVar="someWidgetVar"
value="#{someBean.someDataModel.lazyModel}" paginator="true" rowKey="#{result.id}"
rowsPerPageTemplate="5,10,15" rows="5" styleClass="incidentDatatableClass"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
currentPageReportTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
lazy="true" rowSelectMode="checkbox">
<p:column width="7">
<p:selectBooleanCheckbox id="resourceCheckbox" value="#{result.selected}" style="margin-top: 4px;">
<p:ajax listener="#{copResourceBean.resourceDataModel.selectionChanged(result)}" update=":resourceForm:selectedResourcePanel"/>
</p:selectBooleanCheckbox>
</p:column>
<p:column id="resourceName" headerText="#{language['someHeader']}" sortBy="#{result.name}"
sortFunction="#{helper.sortString}">
<h:outputText value="#{result.name}" />
</p:column>
<p:column id="facilityName" sortBy="#{result.facilityName}" sortFunction="#{helper.sortString}" headerText="#{language['someHeader']}" >
<h:outputText value="#{result.facilityName}" />
</p:column>
<p:column id="availableQuantity" headerText="#{language['someHeader']}" width="80" sortBy="#{result.availableQuantity}"
sortFunction="#{helper.sortNumeric}" >
<h:outputText value="#{result.availableQuantity}" />
</p:column>
</p:dataTable>
答案 0 :(得分:3)
自定义排序(或过滤器函数/方法)在使用延迟加载时不起作用,也不打算这样做。在延迟加载的情况下,您应该在LazyDatamodel实现的load方法中实现排序/过滤。