Buscas dinâmincas
31/07/2016 13:02
1
Bom dia,

Estou tentando buscar dados de duas Classes relacionadas, porém está retornando a exception abaixo:
obs.: Já tentei usar o hql, findAllByParameters conforme a documentação do grails porém sempre está retornando esta mensagem
/colhedados/resposta/searchClassorg.springframework.core.convert.ConverterNotFoundExceptionMessageNo converter found capable of converting from type java.lang.Boolean to type com.colhedados.formulario.Questao

Busca

def search(Resposta respostaInstance){
        def results
        println "resultado" + params["questao.id"].toString()
        def param=params["questao.id"]
        println "Parametro " + param
        println  "Fim"
        if(params.questao!=null){
        def q=Questao.get(param)
        results=Resposta.findAllQuestao(q)
        println "questao  " + q
//        results=Resposta.executeQuery("from Resposta where questao=:paramter", [paramter:param])
        }
        return[ results]
    }


Classes

class Resposta {
String resposta
Date dateCreated
Date lastUpdated 
static belongsTo=[questao:Questao]//,grafico:Grafico]
//static hasMany=[graficos:Grafico]
    static constraints = {
    }

String toString(){
this.resposta
}
}

class Questao {
String questao
Boolean obrigatoria
Boolean ativo
Integer ordem
static belongsTo=[formulario:Formulario]

static hasOne=[tipoQuestao:TipoQuestao,grupo:Grupo]

static hasMany=[alternativa:Alternativa,resposta:Resposta,grafico:Grafico]

String toString(){
this.obrigatoria
this.ativo
this.ordem
this.questao

}

    static constraints = {
questao(nullable:false,blank:false,maxSize:100)
obrigatoria(nullable:true,blank:true)
ativo(nullable:true,blank:true)
deletado(nullable:true,blank:true)
ordem(nullable:true,blank:true)

    }
}
Tags: Busca, find gorm


0
Ja pesquisou createCriteria?

def resposta= Resposta.createCriteria()
def results = resposta.list () {
eq ("questao", q)
}

Ja tentou  results=Resposta.findAllByQuestao(q) ? 

Lembrando que existe diferença entre Boolean  e boolean . Prefiro usar o primitivo boolean e não a classe Boolean. Mude talvez ajude.


0
Boa noite Evandro,

Tentei essas duas formas sim.
No findAllQuestao() passei o params["questao"] porem retorna "No convert found capable converting from type or.codehaus.grails.web.servlet.mvc.GrailsParameterMap to typ com.colhedados.formulario.Questao

e para o criteria 

Subtype org.codehaus.grails.web.servlet.mvc.GrailsParameter not see changes reload in this jierarqchy 

Illegal argument int class com.colhedados.formulario.Questao, getter method of property: id
01/08/2016 21:27


0
O problema esta no tipo que você esta passando . params["questao"] é um map.

def q=Questao.get(param) << Se isso aqui vier correto.
findAllQuestao(q) << Isso aqui funciona.


findAllQuestao(params["questao"]) << Isso não funciona.

então :

def param=params["questao.id"]
def quetaoInstance=Questao.get(param)
def resposta= Resposta.createCriteria()
def results = resposta.list () {
eq ("questao", quetaoInstance)
}


ou

def param=params["questao.id"]
def quetaoInstance=Questao.get(param)
def results=Resposta.findAllByQuestao(quetaoInstance)


Sacou ?


0
Correção:
quetaoInstance = questaoInstance

faltou um S maroto ai


1
[Solved] muito obrigado pelo esclarecimento.
02/08/2016 20:33


0
Disponha!
Estamos aqui pra isso.

Juntos Somos mais fortes!


0
Boa noite consegui realizar a busca dentro da classe com o que você me passou, porém a idéia era deixar como um serviço para realizar a busca e gerar arquivos .csv e txt para o usuário ou mesmo gerar graficos dinamicamente pelo resultado da busca. Quando joguei em uma classe externa um serviço não consigo recuperar os dados.


URI/colhedados/grafico/searchClassgroovy.lang.MissingPropertyExceptionMessageNo such property: Resposta for class: com.colhedados.dados.GraficoController

  def search(Grafico graficoInstance){
        def paramFormulario
        def paramQuestao
        def paramResposta
        def formularioInstance
        def questaoInstance
        
        def results
        if(params["formulario.id"] && params["questao.id"]){
            paramFormulario=params["formulario.id"]
            paramQuestao=params["questao.id"]
            questaoInstance=Questao.get(paramQuestao) 
            formularioInstance=Formulario.get(paramFormulario)
            
            //respostaInstance=Resposta.get(paramResposta)
        }
        results=Resposta.findAllByQuestao(formularioInstance, questaoInstance)//funcionou finalmente        
        if(results!=null){
            return "Nenhum resultado encontrado"
        }
        println "retorno"
        println results
    }

complementando as classes acima criei somente um controller para poder recuperar os dados. qual seria a melhor opção neste caso?
03/08/2016 21:05


0
Fala fera! Não entendi muito bem sua pergunta... =/
Qual seria melhor opção para que ? Explica melhor que eu tento te ajudar no que eu puder.

Dicas:
no Grails  você não precisa validar assim:
if(results!=null){
return "Nenhum resultado encontrado"
  }

E outra, o correto ai seria 
if (results == null) { return "Nenhum resultado encontrato" }


Mas faça assim:
if  (!results) {
return "Nenhum resultado encontrato"
}


Outra:

?
paramFormulario=params["formulario.id"]
paramQuestao=params["questao.id"]
questaoInstance=Questao.get(paramQuestao) 
formularioInstance=Formulario.get(paramFormulario)



Poderia ser:

           
 questaoInstance=Questao.get(params["questao.id"]) 
formularioInstance=Formulario.get(params["formulario.id"])

Assim você declara menores variáveis, uma vez que não precisaria mais do def paramFormulario, def paramQuestao, isso significa menos processamento, menos locações de memoria. 


0
Assim você declara menores variáveis = Assim você declara menos variáveis


0
Boa tarde,

complementando então, a ideia é a partir das repostas poder criar gráficos e relatórios passando os filtros no minimo Formulario:x e Questão: y para que o usuário possa contabilizar e analisar as mesmas porém acho melhor deixar em uma classe separada que possa chamar quando desejar. e ao tentar chamar as mesmas está retonando o que postei anteriomente.
05/08/2016 17:30



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