Filtrar lista do hasMany
16/08/2012 17:36
0
Boa tarde pessoal, estou eu aqui mais uma vez lhes pedidno uma ajudinha, segue minha pergunta:

Tenho 2 classes uma Venda e a outra Funcionario:
onde venda tem um funcionario=> Funcionario funcionario
e Funcionario tem uma lista de vendas => static hasMany=[venda: Venda].

No formulário de cadastro(create) tem um campo do tipo select que me aparece todos os funcionarios segue o codigo:

No Controller tem o metodo de listar:

def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
[vendaInstanceList: Venda.list(params), vendaInstanceTotal: Venda.count()]
}
E no form.gsp tem o select q chama esse método.

O que eu quero é poder filtrar essa lista para que só apareça os funcionários cujo cargo(Uma Classe) seja o de vendedor e nao a lista com todos os funcionários.

Alguem poderia me ajudar???

atenciosamente,
Ericke Accyole.
Tags: filtrar, hasMany, formulario, lista, busca


0
Acho que via criteria você consegue, chame a classe do relacionamento, filtre pela chave de relacionamento + os outros critérios que você precisa, como nestes links : Link 1, Link 2
16/08/2012 19:13


0
Essa criteria é feita no controller exato? e como eu vou chamar ela no form???
16/08/2012 19:20


0
você pode colocar num action/método do controller, e este pode ser invocado pela view e receber de volta a lista com os registros.
16/08/2012 19:39


0
Um exemplo é o método list do scaffold, se você filtrar ele acontece exatamente o caso que você procura.
16/08/2012 19:39


0
Seria mais ou menos assim?:


def v = Venda.createCriteria()
def results = v.list {
like("funcionario", "%vendedor%")

}
maxResults(10)

}

onde venda é minha classe e tem sua lista.
Mas ai q eu nao intendo como eu vou acessar o funcionario que tenha o cargo = vendedor?

em java seria assim:
venda.getFuncionario().getCargo()
16/08/2012 19:49


0
entao minha ideia é exatamente essa, filtrar o list do scaffold
16/08/2012 19:50


0
Isso mesmo Ericke, acredito que assim funcione, testou ? mande o retorno aí.
16/08/2012 21:51


0
Aliás, faltou você também filtrar o a propriedade do relacionamento, para vir apenas aquelas que pertencem a outra classe, tipo :



def v = Venda.createCriteria()
def results = v.list {
like("funcionario", "%vendedor%")
and {eq("idEmpresa", "10")}
}
maxResults(10)

}

16/08/2012 21:53


0
Deu esse erro ai, ajuda please, preciso pra ontem.
URI
/PetShop/venda/list
Class
java.lang.IllegalArgumentException
Message
object is not an instance of declaring class

Around line 17 of grails-app\controllers\petshop\VendaController.groovy

15: params.max = Math.min(max ?: 10, 100)
16: def v = Venda.createCriteria()
17: def results = v.list {
18: like("funcionario", "%vendedor%")
19: and {eq("id", "1")}
20: }
16/08/2012 22:46


0
consegui tirar o erro, mas ainda esta trazendo todos os funcionarios meu metodo list esta assim:

def list(Integer max) {

[vendaInstanceList:def v = Venda.createCriteria() , vendaInstanceTotal:def results = v.list {
like("funcionario", "%vendedor%")
and {eq("funcionario_id", 1)}
maxResults(10)
} ]

}

Era assim:

def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
[vendaInstanceList: Venda.list(params), vendaInstanceTotal: Venda.count()]
}

onde eu mudo???
17/08/2012 00:05


0
na verdade o certo é pra ser assim:

def list(Integer max) {

[funcionarioInstanceList:Funcionario.list(params),funcionarioInstanceTotal:def fun = Funcionario.createCriteria()]
def results = fun.list {
like("cargo", "%vendedor%")

maxResults(10)
}
}

e nao no controller venda.

ja no form de venda eu chamo assim:
<g:select id="funcionario" name="funcionario.id" from="${petshop.Funcionario.list()}" optionKey="id" required="" value="${vendaInstance?.funcionario?.id}" class="many-to-one"/>

ai nao da nenhum erro, nesse select ainda aparece todos os funcionarios ao invez de aparecer so os funcionarios cujo cargo seja vendedor.
17/08/2012 02:42


0
e ai pessoal, alguem me ajuda??
19/08/2012 03:21



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