REGISTRO SE REPETINDO
11/10/2011 09:59
0

Controller:
def buscaList = {

def lista = usuarioService.filterByParams(params)
render (view:'list', model:[ lista:listaUsuario,
params:params])
return
}

Service:
def filterByParams(Map params) {
params.max = Math.min(params?.max?.toInteger()?:10,100)
params.offset = params?.offset?.toInteger()?:0
params.sort = params.sort?:'id'
params.order = params.order?:'asc'

def listaFiltradaDemonstrativo = Usuario.createCriteria().list(
max:params.max,
offset:params.offset,
sort:params.sort,
order:params.order) {

eq('login', params.usuario)
}
return lista
}

GSP:
<h1>Dados do usuario</h1>
<thead>
<tr>
<g:sortableColumn property="id" title="id" params="${params}" />
<g:sortableColumn property="login" title="Nome" params="${params}" />
<g:sortableColumn property="filial" title="Filial" params="${params}" />
</tr>
</thead>
<tbody>
<g:each in="${listaUsuario}" status="i" var="person">
<tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
<td>${person.id?.encodeAsHTML()}</td>
<td>${person.login?.encodeAsHTML() }</td>
<td>${person.filial?.encodeAsHTML()}</td>
</tr>
</g:each>
</tbody>
</table>

Na tabela Usuario filtrando pelo usuario Antonio, tenho 4 registros:
ID LOGIN FILIAL
1 XYZ São Paulo
2 XYZ Rio de Janeiro
3 XYZ Salvador
4 XYZ Santa Catarina

Eu tenho uma página de Busca.gsp e nela tem o campo USER, pra
saber do usuário e filial. Clicando no buscar, ele tem o action: buscaList, do controller


Ao invés de trazer os 4 registros como está no banco,
ele está repetindo por 4 vezes o primeiro registro:
1 XYZ São Paulo
1 XYZ São Paulo
1 XYZ São Paulo
1 XYZ São Paulo


Coloquei o trecho dos códigos, vocês poderiam ajudar porque está repetindo o registro
por 4 vezes e não trazendo os quatro corretos?

Obrigado





Tags: registro se repetindo


0
No seu controlador vc está passando o parametro errado pro model:

def buscaList = {

def lista = usuarioService.filterByParams(params)
render (view:'list', model:[ lista:listaUsuario,
params:params])
return
}

tem que ficar assim:

def buscaList = {

def lista = usuarioService.filterByParams(params)
render (view:'list', model:[ lista:lista, params:params])
return
}


porque o nome do seu objeto é lista e não listaUsuario, ou mudar o nome do objeto acima
11/10/2011 10:41


0
Eu mudei, foi erro de digitação.

Mas continua trazendo os registros repetidos:
1 XYZ São Paulo
1 XYZ São Paulo
1 XYZ São Paulo
1 XYZ São Paulo

E deveria vir:
1 XYZ São Paulo
2 XYZ Rio de Janeiro
3 XYZ Salvador
4 XYZ Santa Catarina

Estou usando o each na GSP, mas ele não está iterando, poderia ajudar?

Obrigado
11/10/2011 10:46


0
No seu each do GSP também está errado o parametro:

<g:each in="${listaUsuario}" status="i" var="person">

Deveria ser:

<g:each in="${lista}" status="i" var="person">
11/10/2011 11:10


0
Castiel,
Também arrumei na GSP, mas mesmo assim está trazendo o mesmo registro por 4x.

Não entendi porque não está iterando.

Você poderia ajudar?

Obrigadp
11/10/2011 11:14


0
No service tbm não está retornando a listaFiltradaDemonstrativo
Altera lá e testa novamente
11/10/2011 11:25


0
Alterei no service para lista, mas ainda retorna os 4 registros iguais.

Não entendo pq não itera a minha lista na página.

Saberia aonde estou errando?

Obrigado
11/10/2011 11:40


0
Próximo teste agora é executar as instruções do service dentro do
grails console
e ver o que está retornando. Pode ser um erro de passagem de parametros do
formulário para o action do Controller.
11/10/2011 11:53


0
Castiel,

Nunca executei pelo grails console, poderia por favor ajudar como executar as instruções do service nele que vc me disse?

Obrigado
11/10/2011 12:02


0
Oi Igor,

executar pelo Grails Console é muito tranquilo. Basta que você execute o comando grails console.

Pra acessar qualquer serviço, você vai precisar ter acesso à classe ApplicationHolder do Grails.

Basicamente você vai escrever um código como o abaixo:


def contextoSpring = org.codehaus.groovy.grails.commons.ApplicationHolder.getApplication().getMainContext()

def meuServico = contextoSpring.getBean("meuBeanService")


voilá, só executar os métodos da sua instância meuServico. Lembre-se de que o nome do bean sempre vai ser algo com o padrão [nome da sua classe de servico]Service.

Por exemplo: se você tem um serviço chamado Juquinha, vai executar um código como o abaixo:


def contextoSpring = org.codehaus.groovy.grails.commons.ApplicationHolder.getApplication().getMainContext()

def meuServico = contextoSpring.getBean("juquinhaService")



0
Castiel, executei o comando abaixo no grails console:

def lista = Usuario.createCriteria().list() {
eq('id', "XYZ")
}

println lista.id
println lista.login
println lista.filial

E trouxe:
1 XYZ São Paulo
1 XYZ São Paulo
1 XYZ São Paulo
1 XYZ São Paulo

Sabe o que está acontecendo??? Não está trazendo uma lista como a que está no banco:
1 XYZ São Paulo
2 XYZ Rio de Janeiro
3 XYZ Salvador
4 XYZ Santa Catarina

Obrigado
11/10/2011 16:41


0
Acho que onde vc está passando os parametros pra criteria está errado eu faço desse jeito, dá uma olhada:

def crite = ItemPedidoVenda.createCriteria()
def lista = crite {
eq("pedidoVenda.numero", numero)
eq("pedidoVenda.emp", emp)
}
return lista

Esse é um exemplo que peguei nos meu códigos.
11/10/2011 17:49



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