Lista e paginate
15/12/2011 15:59
Pessoal .. to tentando fazer um paginate aqui em nao consigo
vejam como é:
class Autor {
int ano
static hasMany = [livros:Livro]
}
preciso listar os livros de um determinado autor, de um determinado ano
eu posso fazer assim no controller
list = {
def autorInstance = Autor.get(params.id)
def livros = autorInstance.livros
def livrosDoAno=[]
livros.each{
if(it.ano == 2011)
livrosDoAno.add(it)
}
[livrosDoAno: livrosDoAno, livrosDoAnoTotal:livrosDoAno.size()]
}
na minha view os livros são listados na tabela porem o paginate nao funciona
Tags:
paginate
Ok.. eu sei q faltou os params
entao fiz assim
params.max = Math.min(params.max ? params.int('max') : 10, 100)
def livrosDoAno = Livro.findAllByAutorAndAno(autorInstance, 2011, params)
mas existem mais de 10 livros no bd
e só são listados 10?
[b]oq foi q faltou:[/b]
Faltou o parametro offset, que serve para trazer os resultados da posição desejada, verifique se o seu paginate está gerando enviando esse parametro corretamente.
obrigado pela dica castiel
mas nao entendi bem o que devo fazer
coloquei params.offset=0
mesmo assim não funcionou
Outra coisa que notei que está errada:
def livrosDoAno = Livro.findAllByAutorAndAno(autorInstance, 2011, params)
[livrosDoAno: livrosDoAno, livrosDoAnoTotal:livrosDoAno.size()]
Quando passa o parametro: 'livrosDoAnoTotal' ele não pode ter o valor da lista 'livrosDoAno'
e sim Livro.findAllByAutorAndAno(autorInstance, 2011).size(), pois o 'livrosDoAno' já está limitado a 10 resultados. E o total não pode ser limitado, se não sempre irá apresentar 10 resultados e nunca o "paginate" vai funcionar.
ah castiel .. vlw!então está ai o problema...
agora o ruim é tenho q fazer essa pesquisa duas vezes: uma com params e outra sem para pegar o total
existe alguma maneira de fazer apenas uma pesquisa que retorne a lista de todas as instancias
Livro.findAllByAutorAndAno(autorInstance, 2011)
e depois "preparar" essa lista para passar para o paginate
(sem precisar fazer a pesquisa com o params)
?
Livro.findAllByAutorAndAno(autorInstance, 2011, params)
Certa vez eu tive a mesma dúvida seu porém estava usando o 'createCriteria'
e não o 'findAllBy', eu repassava o total de linhas da seguinte maneira:
[livrosDoAno: livrosDoAno, livrosDoAnoTotal:livrosDoAno.getTotalCount()]
Usava o método 'getTotalCount()' que funciona com 'createCriteria',
agora com 'findByAll' eu não sei. Faz o teste e repassa para gente o resultado.
p/ o findAllBy não funciona
No signature of method: java.util.ArrayList.getTotalCount()
Faz a busca com o createCriteria é bem simples de usar:
http://www.grails.org/doc/1.3.x/ref/Domain%20Classes/createCriteria.html
Sim eu usei o createCriteria
Obrigado!!!!!!!
como é q faz um criteria testando se a data que está no banco é maior (ou menor) que a data de hoje?
estou tentando e nao consigo :\
opa.. deveria ter pesquisado um pouco mais!
hehe fiz isso e achei
lt -> menor que
le -> menor ou igual
gt -> maior que
ge -> maior ou igual
sendo assim ^^
le("date", new Date())
-> data menor ou igual a hoje (passado)
gt("date", new Date())
-> data maior a hoje (futuro)
Ainda não faz parte da comunidade???
Para se registrar, clique aqui.