Como filtrar o resultado de uma tag <g:each ...
17/09/2014 13:44
0
Prezados membros,

Preciso saber como filtrar uma tag <g:each...

Tenho uma página que mostra todos os usuários:

<g:each in="${userInstanceList}" status="i" var="userInstance">


Porém gostaria de trazer apenas os usuários de uma determinada instalação...

Minha tabela usuário tem:


class User {
...
static belongsTo = [instalacao:Instalacao]
...


Agradeço seu tempo em me ajudar.

Sucesso a todos!

Tags: filtros;g:each;filtro;filtrar;each;


1
trabalhe o ${userInstanceList} ele eh a listagem de users..

vem de algum controller neh... de uma action/metodo..

adapte para filtrar ou crie outra lista de usuarios personalizada.. se tiver dificuldade c o filtro veja sobre criteras grails... coisa linda de deus ;)

avisa se nao conseguir

abs
17/09/2014 19:50


1
Olá Pedro,
Já tentou?

userInstanceList.find{it.instalacao == sua_condicao}
17/09/2014 20:01


0
Olá Rafael e Dyego,
Obrigado...

Eu já olhei Criteria Queries, etc...
Dentro do meu controller para User não existe uma referência a uma ação list que possa estar relacionada a userInstanceList. Tentei criar uma ação list no controller de User, porém ela não foi evocada. Até coloquei um println no início para ter certeza, mas não passou por aí. Apenas a view não motrou registro algum... veja:


def listInst() {
//keep these values so we can rerender on the filters

flash.instalacao = params.instalacao

if(!params.max) {
params.max = 10
}
def query
def criteria = User.createCriteria()
def results

query = {

if(params.instalacao){
def selInstalacao = Instalacao.get(Integer.parseInt(params.instalacao))
eq('instalacao', selInstalacao )
}

}
results = criteria.list(params, query)


}


Por favor, se puderem lançar mais luz neste assunto, agradeço!
17/09/2014 20:30


1
o que o dyego faloou deveria funcionar tambem...
e da pra fazer na sua tag

userInstanceList.find{it.instalacao == sua_condicao}


17/09/2014 23:14


1
Olá Pedro,
Porque a solução que sugeri não funciona?
esse "userInstanceList" não é um conjunto de "User"? se for não vejo porque não funcionaria...
Sua dúvida é obter uma lista de "User" ou filtrar uma lista existente? (ou outra coisa).
18/09/2014 10:20


0
Olá Dyego,

O que eu preciso: Da lista de todos os usuários que pertencem à mesma instalação do usuário autenticado (logado).

Eu não estou conseguindo fazer uma referência à "instalacao" que está em "session.user.instalacao" dentro do "find".

No controller do usuário a variável user em session foi definida corretamente (i.e. está funcionando para os propósitos de mostrar dados do usuário e para o logoff da aplicação):


...
def authenticate = {
def user = User.findByLoginAndSenha(params.login, params.senha)
if(user) {
session.user = user
...


Quando eu uso o find da seguinte forma, a lista é preenchida:


<g:each in="${userInstanceList.findAll{it.instalacao != null}}" status="i" var="userInstance">


Quando uso na forma abaixo nada é retornado - lista vazia:


<g:each in="${userInstanceList.findAll{it.instalacao != session.user.instalacao}}" status="i" var="userInstance">


Sei que falta pouco, mas realmente não estou enxergando a resposta.

Agradeço muitíssiomo o seu tempo!



18/09/2014 17:28


0
Oi Dyego, por favor, considere a correção para o código acima:

onde está ecrito:


<g:each in="${userInstanceList.findAll{it.instalacao [color=red]!=[/color] session.user.instalacao}}" status="i" var="userInstance">


leia-se


<g:each in="${userInstanceList.findAll{it.instalacao [color=green]==[/color] session.user.instalacao}}" status="i" var="userInstance">


Obrigado!
18/09/2014 17:32


0
Oi Rafael,

Eu não consegui identificar de controller vem userInstanceList. Deveria ser talvez a action list no controller do user... porém não é esta action a evocada... parece-me algum padrão do Grails... todo Domain que tenho eu posso usar nomeDoDomainInstanceList...

Obrigado!
18/09/2014 17:43


1
Vc deu um create-scaffold-controller, foi?

Se sim, vai ter que dar um @override no metodo list...
... ou dar um 'grails generate controller pacote.User"

isso vai gerar seus controllers e vai achar a linha que quer e poder mexer no código.

Mas se não quiser fazer isso (vai sobrescrever seu controller atual, então faça backup)


Mas como disse antes, a solução proposta pelo Dyego deveria funcionar tb... vc testou seu session.user.instalacao ?

faz algo assim


userInstanceList.find{it.instalacao == Instalacao.get(1)}

e tenha certeza que tem usuários associado a instalação 1...

e coloca em algum lugar da sua view um ${session.user.instalacao} p ver o que tem

18/09/2014 18:00


0
Olá Rafael e Dyego,

Funcionou!

A ação do UserController que está sendo chamada é a index.

Reescrevi a ação da seguinte forma:


def index(Integer max) {
params.max = Math.min(max ?: 10, 100)

def c = User.createCriteria()
def results = c.list {
eq('instalacao', session.instalacao)
}
}


Antes estava assim:


def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
respond User.list(params), model:[userInstanceCount: User.count()]
}


Não precisei utilizar o Find. A chamada na página ficou assim:


<g:each in="${userInstanceList}" status="i" var="userInstance">


Obrigado a vocês,

Sucesso!

18/09/2014 19:50



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