Utilizando opções avançadasImplementando paginação dos dados... introduzir mecanismo e lazy
loadingexplicar interface Pagination (unidade
básica de paginação) e contexto de paginação
PaginationContext, disponível através de injeçãoo exemplo em questão é específico para o PrimeFaces se for
utilizar outra implementação, tal como RichFaces, ... código será
semelhanteNo pacote
br.gov.frameworkdemoiselle.sample.view altere a classe
BookmarkListMB incluindo nela as linhas de
código a seguir: private DataModel<Bookmark> dataModel;
@Override
@SuppressWarnings("unchecked")
public DataModel<Bookmark> getDataModel() {
if (dataModel == null) {
dataModel = new LazyDataModelImpl();
}
return dataModel;
}
private class LazyDataModelImpl extends LazyDataModel<Bookmark> {
private static final long serialVersionUID = 1L;
private boolean loaded = false;
@Override
public int getRowCount() {
if (!loaded) {
getPagination();
handleResultList();
loaded = true;
}
return getPagination().getTotalResults();
}
@Override
public List<Bookmark> load(int first, int pageSize, String sortField,
boolean sortOrder, Map<String, String> filters) {
Pagination pagination = getPagination();
pagination.setPageSize(pageSize);
pagination.setFirstResult(first);
return handleResultList();
}
}A interface DataModel pertence à
especificação JSF, enquanto que a classe abstrata
LazyDataModel é uma implementação da primeira fornecida
pelo framework PrimeFaces.No diretório /src/main/webapp/, altere o
arquivo bookmark_list.xhtml substituindo
apenas a tag p:dataTable com o conteúdo
seguinte:<p:dataTable id="list" height="300" var="bean" value="#{bookmarkListMB.dataModel}"
lazy="true" paginator="true" rows="#{bookmarkListMB.pageSize}"
pageLinks="#{bookmarkListMB.maxPageLinks}">...No diretório /src/main/resources/,
altere o arquivo demoiselle.properties
incluindo as linhas a seguir:frameworkdemoiselle.pagination.default.page.size = 5
frameworkdemoiselle.pagination.max.page.links = 3...Paginação de dados na aplicação BookmarkAplicação
Bookmark em funcionamento...INFO [STDOUT] Hibernate: select top ? count(bookmark0_.id) as col_0_0_ from Bookmark bookmark0_
INFO [STDOUT] Hibernate: select top ? bookmark0_.id as id4_, bookmark0_.description as descript2_4_, bookmark0_.link as link4_ from Bookmark bookmark0_
INFO [STDOUT] Hibernate: select limit ? ? bookmark0_.id as id4_, bookmark0_.description as descript2_4_, bookmark0_.link as link4_ from Bookmark bookmark0_// todo: explicar superficialmente como implementar no
RF...
import org.richfaces.component.UIDatascroller;
import org.richfaces.event.DataScrollerEvent;
// evento específico do RichFaces
public void updatePage(DataScrollerEvent e) {
int index = ((UIDatascroller) e.getComponent()).getPage();
Page pagina = new Page(getRows(), index);
recarregarLista(pagina);
}
<rich:datascroller for="table"
maxPages="#{bookmarkListMB.maxPages}" page="#{bookmarkListMB.currentPage}"
reRender="table" scrollerListener="#{bookmarkListMB.updatePage}" />
<rich:dataTable width="100%" value="#{bookmarkListMB.lazyModel}"
rows="#{bookmarkListMB.pageSize}"
var="element" rowKeyVar="row" id="table">