Dê uma olhada em createCriteria que resolve o seu problema de busca:
http://www.grails.org/doc/latest/ref/Domain%20Classes/createCriteria.html
Sobre o botão vc pode criar uma ação Pesquisar no seu controlador e vincular ela ao botão do form:
<g:actionSubmit class="pesquisar" action="pesquisar" value="Pesquisar" />
Obrigado castiel, como sou novato, você teria um exemplo de criteria usando aquela minha query e essa query recebendo como parametro o nome do aluno?
Obrigado
Dá uma olhada nesses códigos:
https://github.com/mikemil/AjaxExamples
nesse repositório mostrar como fazer busca usando ajax, muito interessante.
Olá KIKO, eu li a matéria que você escreveu, mas eu não entendi como que se faz o "join" nas tabelas.
Poderia por favor colocar um exemplo?
Obrigado
Obrigado pessoal.
Mas ainda não consegui fazer a busca por criterio usando seu exemplo Henrique
Além dos domains e controllers Autor e Livro que criei para testar, criei a página busca.gsp.
o action da da pagina de busca que só tem o nome do autor, chama o filteredList. No controller da busca coloquei:
def filteredList = {
def listaFiltrada = buscaService.filterByParams(params)
render (view:'list', model:[personList:listaFiltrada,
params:params])
return
}
Service, coloquei o que o henrique passou:
def filterByParams(Map params) {
def listaFiltrada = Livro.withCriteria {
autor {
eq('nome', 'igor')
}
}
return listaFiltrada
}
Mas retorna erro:
Error 500: Executing action [filteredList] of controller [livraria.BuscaController] caused exception: groovy.lang.MissingMethodException: No signature of method: livraria.BuscaService.autor() is applicable for argument types: (livraria.BuscaService$_filterByParams_closure1_closure2) values: [livraria.BuscaService$_filterByParams_closure1_closure2@11eef55] Possible solutions: getLog(), wait(), dump(), any(), wait(long), getAt(java.lang.String)
Servlet: grails
URI: /livraria/grails/busca/filteredList.dispatch
Exception Message: No signature of method: livraria.BuscaService.autor() is applicable for argument types: (livraria.BuscaService$_filterByParams_closure1_closure2) values: [livraria.BuscaService$_filterByParams_closure1_closure2@11eef55] Possible solutions: getLog(), wait(), dump(), any(), wait(long), getAt(java.lang.String)
Caused by: No signature of method: livraria.BuscaService.autor() is applicable for argument types: (livraria.BuscaService$_filterByParams_closure1_closure2) values: [livraria.BuscaService$_filterByParams_closure1_closure2@11eef55] Possible solutions: getLog(), wait(), dump(), any(), wait(long), getAt(java.lang.String)
Class: BuscaController
At Line: [39]
Estou tentando fazer de exemplo o que o Henrique passou de Livro e Autor, mas a pesquisa
Livor.withCriteria {
autor {
eq('nome', 'igor')
}
}
Parece não funcionar, seria bem simples mesmo, a partir da pagina de busca, passar o nome do autor e retornar os livros que ele tem relacionamento.
Obrigado
Igor,
vou te fazer uma pergunta boba: percebi que no seu exemplo inicial, você referencia entidades chamadas aluno, nota e matéria.
No exemplo que te passei, foi Livro e Autor. Você tem uma entidade Livro e outra chamada Autor no seu projeto? Porque se você não tem, e simplesmente copiou o meu exemplo, realmente não vai funcionar :)
Obrigado Henrique pela ajuda.
Eu fiz um teste criando um novo projeto usando o que vc passou, livro e autor.
Aí funcionou a pesquisa usando:
Livro.withCriteria {
autores {
eq("nome", "Machado de Assis")
}
}
Valeu pela ajuda
Bom pessoal vendo aqui esta discursão e entrando essa criteria para busca eu coloco em qual arquivo no controller no doman ou na view do aplicativo??