Problema com o paginate do grails
19/07/2010 00:00
0
Boa noite,

Estou com o seguinte problema, no banco eu tenho os seguintes dados:

usuario grupo
a 1
b 1
c 1
d 1
e 1
f 1
g 1
h 1
i 1
j 2

O problema é que quando eu mando listar pelo id=2

(User.listUser(id, params))
Metodo
static listUser(id, params)) {
User.list(params).findAll {
it -> it.id == id
}
}


e passo os "params", na primeira pagina aparece apenas o usuario j, e na segunda pagina os próximos.

Exemplificando o problema, ele conta 10 e depois aplica o filtro pra 2,

Tem como ele filtrar e depois contar os 10 passados nos parametros?

Abraços.
Tags: Grails


0
Boa tarde!

Não consegui entender qual é o problema você está tendo. Tem como explicar um pouco melhor? E outra coisa que não entendi: Você usa um método estático e esse método estático faz um um "list().findAll..." sendo que você poderia simplesmente usar só o seguinte:


User.findAllById(id,params);


Mande mais detalhes pra podermos te ajudar.

Grande abraço!
27/07/2010 00:00


0
Olá

Obrigado pela dica abaixo:

User.findAllById(id,params)


Eu não tinha usado por falta de conhecimento mesmo, e quanto à questão:

Faça o seguinte teste, crie uma classe Teste com os seguintes campos:

Nome e Codigo,

Agora cadastre uns 20 com o codigo 1 no início e depois cadastre outros com o codigo 2

Aí no controller list

você faz a seguinte lista

 list = Teste.findAllByCodigo(id,params)


Se você deixar no list.gsp o numero total de cadastrados Test.count() vai ver q na primeira pagina vai ficar em branco, e na segunda pagina vai aparecer as que tem o código 2.

Entendeu mais ou menos?

Qq coisa eu tento detalhar mais, sou um pouco ruím com na organização de palavras

Grato
31/07/2010 00:00


0
Você não deve usar o "Test.count()" pois ele te retorna o total de registros cadastrados e não o total da sua pesquisa. Sendo assim você deve enviar para a sua view o total de registros encontrados. Você pode fazer assim:


def pesquisa = {
params.max = 20;
def listaTestes = Test.findAllById(params.id,params);

render(view:'list',model:[testInstanceList: listaTestes , testInstanceTotal: listaTestes.count()])
}


Depois, na sua view, não use o "Test.count()" e sim "testInstanceTotal".

Espero ter ajudado.
03/08/2010 00:00


0
Boa noite ReubenCastro,

Então, eu pedi pra deixar o count só pra exemplificar melhor, repare que se você testar isso, e cadastrar os dados como eu tenho dito anteriormente vai ver que acontecerá o seguinte:

O
listaTestes.count()
retornará que será necessário uma pagina apenas para renderizar o conteúdo, então ele não disponibilizará o paginate,

Logo, o valor que queremos "2", vai estar na segunda página, considerando que o "params.max = 10", aí a página irá exibir nenhum dado como se não existisse o valor "2".

É esse o problema que estou tentando resolver, por que o grails não cria uma lista limpa com o filtro que ordenei que criasse,

Ele traz a lista toda e depois vai varrendo a lista até encontrar o "2" aí ele renderiza na tela, só que como o "2" está quase no final da fila e está depois da 10ª posição ele não aparece na primeira página do list.

Espero que agora tenha ficado melhor a explicação.

Grato.
03/08/2010 00:00


0
Boa noite,

Derrepente seu problema esteja em como está utilizando esta lista no view, mande um exemplo de como está utilizando na view, derrepente fica mais facil resolver seu problema.

No aguardo.....
08/08/2010 00:00


0
Boa noite

Não sei se já resolveu teu problema, mas já tive um problema parecido com este...

Voce deve utilizar:
listaTestes.totalCount()

ao invés de:
listaTestes.count()


totalCount retorna o total geral da consulta que voce esta fazendo, mostrando a paginação correta para cada caso, já count é o total de dados contidos na classe.

No exemplo abaixo, mostra apenas as viagens(trip) da empresa(company) do usuário logado (plugin acegi):

def list = {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
def company = User.get(authenticateService.userDomain().id)?.company
def tripList
if (company) {
tripList = Trip.createCriteria().list(params) {
crew {
groupLine {
eq('company.id', company.id)
}
}
}
//aqui totalCount retorna o total geral da consulta
return [tripInstanceList: tripList, tripInstanceTotal: tripList.totalCount]
}
//aqui count retorna o total contindo na tabela trip
[tripInstanceList: Trip.list(params), tripInstanceTotal: Trip.count()]
}
11/08/2010 00:00



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