LazyDataModel初始加载多次调用

时间:2020-04-16 14:45:33

标签: primefaces primefaces-datatable

我有这个数据表,该数据表是我用Primefaces的LazyDataModel实现的。 初次打开或刷新页面时,除了初始加载外,其他一切都正常。 加载方法被调用6-7次。

当我更改页面,过滤器或对其进行正确排序时,加载仅调用一次。

由于我执行了对数据库的调用,因此我想防止调用它的次数超过需要的次数。

我有以下内容:

XHTML:

    <p:outputPanel id="documentsPanel">
        <h:form id="documentsForm">
            <p:dataTable id="documentsTable"
                         widgetVar="documentsTable"
                         var="doc"
                         value="#{MyManagedBean.model}"
                         paginator="true" rows="20"
                         paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {CurrentPageReport}"
                         currentPageReportTemplate="{totalRecords} #{c.NumberOfRequestFound}"
                         lazy="true">
     ...

            </p:dataTable>
        </h:form>
    </p:outputPanel>

Java:

public class DocumentEncodingDataModel extends LazyDataModel<SelectableDocumentToBeEncodedDTO> {

@Override
public List<SelectableDocumentToBeEncodedDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
   ....
}

@Override
public int getRowCount() {
    return super.getRowCount();
}

@Override
public SelectableDocumentToBeEncodedDTO getRowData(String rowKey) {
    log.debug("getRowData");
    if (!StringUtils.isBlank(rowKey)) {
        for (SelectableDocumentToBeEncodedDTO doc : currentDocumentsToBeEncoded) {
            if (doc.getDocumentToBeEncoded().getId().toString().equals(rowKey)) {
                return doc;
            }
        }
    }
    return null;
}

@Override
public Object getRowKey(SelectableDocumentToBeEncodedDTO doc) {
    return doc.getDocumentToBeEncoded().getId();
}

}

Primefaces版本:6.2 JSF版本:2.1

0 个答案:

没有答案