在延迟加载Primefaces数据表中不调用自定义排序方法

时间:2016-05-26 12:51:01

标签: sorting jsf jsf-2 primefaces datatable

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

1 个答案:

答案 0 :(得分:3)

自定义排序(或过滤器函数/方法)在使用延迟加载时不起作用,也不打算这样做。在延迟加载的情况下,您应该在LazyDatamodel实现的load方法中实现排序/过滤。