Lista e paginate
15/12/2011 15:59
0
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


0
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]
15/12/2011 16:12


0
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.
15/12/2011 22:25


0
obrigado pela dica castiel

mas nao entendi bem o que devo fazer

coloquei params.offset=0
mesmo assim não funcionou
16/12/2011 00:54


1
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.
16/12/2011 11:01


0
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)
16/12/2011 13:22


0
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.
16/12/2011 14:13


0
p/ o findAllBy não funciona

 No signature of method: java.util.ArrayList.getTotalCount() 
16/12/2011 20:45


0
Faz a busca com o createCriteria é bem simples de usar:
http://www.grails.org/doc/1.3.x/ref/Domain%20Classes/createCriteria.html
16/12/2011 23:24


0
Sim eu usei o createCriteria
Obrigado!!!!!!!
20/12/2011 20:16


0
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 :\
21/12/2011 23:40


0
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)

22/12/2011 00:07



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto