Olá pessoal
Estou com dificuldade de fazer paginação.
Estou usando displaytag para listar.
Alguém!
Olá pessoal
Estou com dificuldade de fazer paginação.
Estou usando displaytag para listar.
Alguém!
vc já colocou o atributo “pagesize”?
ex:
<display:table id="cliente" pagesize="10">
...
</display:table>
cleison, se for aquele caso dos 29mil registros, o displaytag puro não vai ajudar…
tenta fazer o simples: uma lógica que recebe um int que é a página que vc tá…
na sua query (ou criteria) coloque:
query.setMaxResults(20).setFirstResult(pagina*20)
e mostre os resultados numa tabela comum… com isso funcionando é só adaptar pro que vc precisa
[quote=Lucas Cavalcanti]cleison, se for aquele caso dos 29mil registros, o displaytag puro não vai ajudar…
tenta fazer o simples: uma lógica que recebe um int que é a página que vc tá…
na sua query (ou criteria) coloque:
query.setMaxResults(20).setFirstResult(pagina*20)
e mostre os resultados numa tabela comum… com isso funcionando é só adaptar pro que vc precisa
[/quote]
Isso mesmo Lucas.
no meu Dao ficou assim
public List<Produto> listaTudo(int first, int max) {
Criteria criteria = this.session.createCriteria(Produto.class);
criteria.addOrder(Order.asc("nome"));
criteria.setFirstResult(first);
criteria.setMaxResults(max);
return criteria.list();
}
O que poderia fazer no meu controller e jsp?
lista como se vc estivesse com a lista inteira…
a única diferença é que vc tem o parâmetro page, e vai definir qtos resultados por página.
no jsp é só colocar links pra próxima página, ou usar um link como esse: http://plugins.jquery.com/project/pagination
Alguém já testou isto?
http://code.google.com/p/jmesa/
Legal!
http://code.google.com/p/jmesa/wiki/JSPTagTutorialV3
Abraço!
Se você der uma pesquisada aqui no guj nos meus posts há um que eu explico como fazer uma paginação bem interessante, integrando taglib + hibernate para paginar, inclusive com um converter para o Vraptor.
Fla Garcia
Pesquisei bastante, vi esse o post abaixo mas não compreendi como aplicar.
http://www.guj.com.br/posts/list/206481.java#1078145
Como listar a quantidade de registro desta lista?
public List<Produto> listaTudo(int pagina) {
Criteria criteria = this.session.createCriteria(Produto.class);
criteria.addOrder(Order.asc("codProduto"));
criteria.setFirstResult(pagina * 20);
criteria.setMaxResults(20);
return criteria.list();
}
qto tem no total?
vc vai precisar fazer 1 select a mais:
Long totalDeRegistros = session.createQuery("select count(*) from Produto").uniqueResult();
[quote=Lucas Cavalcanti]qto tem no total?
vc vai precisar fazer 1 select a mais:
Long totalDeRegistros = session.createQuery("select count(*) from Produto").uniqueResult();
[/quote]
Vlw Lucas.
Tem algum exemplo como implementar a classe paginator post do rodrigo que citei acima ou algo parecido.
Cleison, o post que te falei é esse aqui: http://www.guj.com.br/posts/list/206481.java#1077887
O código fonte está aqui: http://gist.github.com/249508
[quote=garcia-jj]Cleison, o post que te falei é esse aqui: http://www.guj.com.br/posts/list/206481.java#1077887
O código fonte está aqui: http://gist.github.com/249508[/quote]
Importei os fontes… Desculpe a minha insistencia… Como interagir com DAO e Controller e JSP?
Lá no post que te passei o link explica como usar.
[quote=Lucas Cavalcanti]qto tem no total?
vc vai precisar fazer 1 select a mais:
Long totalDeRegistros = session.createQuery("select count(*) from Produto").uniqueResult();
[/quote]
Crie um esse metodo e funciona normal traz o total da lista.
public int getTotalRegistros() {
Criteria c = session.createCriteria(Produto.class);
c.setProjection(Projections.rowCount());
return (Integer) c.uniqueResult();
}
Como retornar somente a quantidade de registro pesquisados num metodo de busca list?
Com a quantidade de registros estimada (que vem de getTotalRegistros()), com o número da página atual e com a quantidade de registros por página você consegue calcular o range que você vai exibir.
int currentPage = qual-a-pagina-atual;
int perPage = quantidade-de-registros-por-pagina;
int totalRecords = getTotalRegistros(); // método que você escreveu acima
int firstRecord = (currentPage * perPage) - perPage;
int lastPage = new Double(Math.ceil((double) totalRecords / perPage)).intValue();
Agora você já sabe qual o primeiro e último registro que você precisa exibir, basta então fazer a consulta no banco utilizando esses valores:
[code]Criteria c = session.createCriteria(Produto.class);
c.setMaxResults(perPage);
c.setFirstResult(firstRecord);
List produtos = c.getResultList();[/code]
Com a quantidade de registros estimada (que vem de getTotalRegistros()), com o número da página atual e com a quantidade de registros por página você consegue calcular o range que você vai exibir.
int currentPage = qual-a-pagina-atual;
int perPage = quantidade-de-registros-por-pagina;
int totalRecords = getTotalRegistros(); // método que você escreveu acima
int firstRecord = (currentPage * perPage) - perPage;
int lastPage = new Double(Math.ceil((double) totalRecords / perPage)).intValue();
Agora você já sabe qual o primeiro e último registro que você precisa exibir, basta então fazer a consulta no banco utilizando esses valores:
[code]Criteria c = session.createCriteria(Produto.class);
c.setMaxResults(perPage);
c.setFirstResult(firstRecord);
List produtos = c.getResultList();[/code][/quote]
Como se aplicaria na seguinte busca?
public List<Produto> busca(String nome,int pagina) {
return session.createCriteria(Produto.class)
.add(Restrictions.ilike("nome", nome, MatchMode.START))
.addOrder(Order.asc("nome"))
.setFirstResult(pagina * 20)
.setMaxResults(20)
.list();
}
Você quer que eu programe por você? :twisted:
[code]package com.commons.collections.pagination;
import java.io.Serializable;
import java.util.List;
public class PaginationList implements Serializable {
private static final long serialVersionUID = -7705117997457384895L;
private List<T> list;
private int totalRecords;
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
}
[/code]
Implementação.
protected final PaginationList<T> getPaginationList(TypedQuery query, Integer page, Integer rows) {
int totalRecords = query.getResultList().size();
page = page - 1;
List<T> results = query.setFirstResult(page * rows).setMaxResults(rows).getResultList();
PaginationList<T> paginationList = new PaginationList<T>();
paginationList.setTotalRecords(totalRecords);
paginationList.setList(results);
return paginationList;
}
Você quer que eu programe por você? :twisted: [/quote]
Olá garcia só não compreendi como aplicar as intruções que vc me passou, mas desde já agradeço a atenção.
cleison Bom Dia !
Nem você nem eu !
Junior.