У меня есть этот набор данных, который я реализовал с помощью LazyDataModel от Primefaces. Все работает отлично, за исключением начальной загрузки, когда я открываю страницу в первый раз или refre sh. Метод загрузки вызывается 6-7 раз.
Когда я меняю страницу, фильтрую или сортирую, она работает правильно, загрузка вызывается только один раз.
Поскольку я выполняю вызовы в базу данных, мне бы хотелось чтобы не вызывать его больше, чем нужно.
У меня есть следующее:
X HTML:
<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