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!