Paginação por demanda com PrimeFaces M4

Pessoal, faz um bom tempo que estou tentando fazer uma paginação por demanda na tabela com o primeFaces M4 e não estou conseguindo. Ja usei o exemplo que tem lá no showCase, mas nesse exemplo carrega todos os dados do banco e eu quero que carregue uma determinada quantidade. Por favor, se alguém tiver algum exemplo me ajude.

Pq vc está utilizando a M4?

Pq vc não usa a versão final que já foi lançada?
http://primefaces.org/downloads.html

Posso até mudar, mas igual nao sei como fazer a paginação por demanda. Se tiver algum exemplo, por favor, posta ou me manda: cleverrossiu@gmail.com. Obrigado.

posta seu codigo ai

Eu não sei como buscar lá no DAO os registros ja páginados, e depois como chama-lo no bean.

Posta o que você tentou fazer.

sera que o que você está querendo fazer é o lazy mode?

Vou postar por partes:
Meu bean:

[code]private LazyDataModel lazyModel;

public CarretaMBean() {
listaCarreta = new ArrayList();
lazyModel = new LazyCarretaDataModel(listaCarreta);
}[/code]

E o LazyCarretaDataModel:

[code]public LazyCarretaDataModel(List datasource) {
this.datasource = datasource;
setRowCount(this.datasource.size());
}

@Override
public Carreta getRowData(String rowKey) {
	for (Carreta carreta : datasource) {
		if (carreta.getCodigocarreta().equals(rowKey))
			return carreta;
	}

	return null;
}

@Override
public Object getRowKey(Carreta carreta) {
	return carreta.getCodigocarreta();
}

@Override
public List<Carreta> load(int first, int pageSize, String sortField,
		SortOrder sortOrder, Map<String, String> filters) {
	List<Carreta> data = new ArrayList<Carreta>();

	// filter
	for (Carreta carreta : datasource) {
		boolean match = true;

		for (Iterator<String> it = filters.keySet().iterator(); it
				.hasNext();) {
			try {
				String filterProperty = it.next();
				String filterValue = filters.get(filterProperty);
				String fieldValue = String.valueOf(carreta.getClass()
						.getField(filterProperty).get(carreta));

				if (filterValue == null
						|| fieldValue.startsWith(filterValue)) {
					match = true;
				} else {
					match = false;
					break;
				}
			} catch (Exception e) {
				match = false;
			}
		}

		if (match) {
			data.add(carreta);
		}
	}

	// sort
	if (sortField != null) {
		Collections.sort(data, new LazySorter(sortField, sortOrder));
	}

	// rowCount
	int dataSize = data.size();
	this.setRowCount(dataSize);

	// paginate
	if (dataSize > pageSize) {
		try {
			return data.subList(first, first + pageSize);
		} catch (IndexOutOfBoundsException e) {
			return data.subList(first, first + (dataSize % pageSize));
		}
	} else {
		return data;
	}
}[/code]

XHTML:

<p:dataTable id="dtCarreta" value="#{carretaMBean.lazyModel}" lazy="true" var="item" paginator="true" rows="5" emptyMessage="#{msgs.dtVazia}" rowsPerPageTemplate="5,10,15" selection="#{carretaMBean.selectedCarretas}" rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}" rowIndexVar="rowIx" rowKey="#{item.codigocarreta}"> ........ </p:table>

É isso que fiz ate agora.

Pessoal agora esta paginando por demanda, mas nao esta funcionando os sortBy e os filterBy, da um erro assim:

[code]21:56:50,094 ERROR [stderr] (http–127.0.0.1-8080-2) javax.faces.application.ViewExpiredException: viewId:/cadastroCarreta.jsf - A exibição de /cadastroCarreta.jsf não pôde ser restaurada.

21:56:50,094 ERROR [stderr] (http–127.0.0.1-8080-2) at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:200)

21:56:50,094 ERROR [stderr] (http–127.0.0.1-8080-2) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

21:56:50,094 ERROR [stderr] (http–127.0.0.1-8080-2) at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:111)

21:56:50,095 ERROR [stderr] (http–127.0.0.1-8080-2) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

21:56:50,095 ERROR [stderr] (http–127.0.0.1-8080-2) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)

21:56:50,095 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)

21:56:50,095 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)

21:56:50,095 ERROR [stderr] (http–127.0.0.1-8080-2) at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)

21:56:50,095 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)

21:56:50,095 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)

21:56:50,096 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)

21:56:50,096 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)

21:56:50,096 ERROR [stderr] (http–127.0.0.1-8080-2) at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:139)

21:56:50,096 ERROR [stderr] (http–127.0.0.1-8080-2) at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57)

21:56:50,096 ERROR [stderr] (http–127.0.0.1-8080-2) at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:49)

21:56:50,096 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154)

21:56:50,097 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

21:56:50,097 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

21:56:50,097 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)

21:56:50,097 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)

21:56:50,097 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667)

21:56:50,097 ERROR [stderr] (http–127.0.0.1-8080-2) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:952)

21:56:50,098 ERROR [stderr] (http–127.0.0.1-8080-2) at java.lang.Thread.run(Thread.java:619)[/code]

O meu Bean:

[code]@PostConstruct
private void init() {
lazyModel = new LazyDataModel() {
@Override
public List load(final int first, final int pageSize, final String sortField, final SortOrder sortOrder,
final Map<String, String> filters) {

			final List<Carreta> toReturn = carretaService.getListaPaginado(first, pageSize);

			if (ehParaContar) {
				rowCount = carretaService.count();
				lazyModel.setRowCount(rowCount);
				ehParaContar = false;
			}
			return toReturn;
		}
	};
	rowCount = carretaService.count();
	lazyModel.setRowCount(rowCount);
}[/code]

DAO

[code]public int count() {
Long resultado = new Long(0L);
Query query = getSession().createQuery(“select count(e) from Carreta e” );
resultado = (Long) query.uniqueResult();
return resultado.intValue();
}

@SuppressWarnings("unchecked")
public List<Carreta> getListaPaginado(int inicio, int quantidade) {
    Session ses = getSession();
    Query query = ses.createQuery("SELECT e FROM Carreta e").setFirstResult(inicio).setMaxResults(quantidade);

    List<Carreta> lista = (List<Carreta>) query.list();
    return lista;
}[/code]

Alguém tem ideia do que pode ser?

Cara, esse erro acontece quando a sessão acaba ou então vc faz um restart no seu servidor por alteração de código, por exemplo.

Procure na net aí que tem modos de tratar esse erro.

O modo mais fácil é sempre abrir uma aba nova.

O erro foi resolvido mas os sortBy e os filterBy nao funcionam. Alguém já fez isso com paginação por demanda?

[quote=clever]O erro foi resolvido mas os sortBy e os filterBy nao funcionam. Alguém já fez isso com paginação por demanda?[/quote]Viu que o método load tem esses 3 parâmetros no final?

final String sortField, final SortOrder sortOrder, final Map<String, String> filters

Eu vi mas não tenho ideia de como implementar o método para furcionar…

dá uma “olhada” no que esses parâmetros tem.

Faz assim, no p:column, inclua os parâmetros “sortBy” e “filterBy”, esses parâmetros que passar no sortBy e FilterBy do p:column, verifica como os resultados são passados para os parâmetros. O SortBy é uma String com o nome da coluna (informada no sortBy do p:column), o sortOrder você compara com SortOrder.ASCENDING, DESCENDING ou um outro que não lembro. O FilterBy vai ter um Map com o key igual ao nome da coluna informado no p:column pelo parâmetro filterBy, e o value igual ao texto digitado pelo usuário na caixa de edição.

A sim, entendi o esquema. Mas vc nao tem um exemplo pra mim da uma olhada? Se nao quiser postar aqui envia por email: cleverrossiu@gmail.com

Obrigado.

Ola pessoal, conseguiram resolver o problema? Vocês poderiam postar um exemplo da paginação sobre demanda?

Obrigado!