Metodo transients na domain com parâmetros
25/02/2014 12:27
0
Boa tarde, Pessoal.

Imagino que seja possível ter métodos na Domain que não sejam persistidos e que trabalhem com variáveis, mas não estou conseguindo fazer. Alguém pode me ajudar?


class DomainClass {
String atributo
String getMeuMetodoComParametro(String variavel) { "o valor da variavel eh" + variavel }
static transients = ['meuMetodoComParametro']
}


Daí na GSP eu tenho feito para testar

${DomainClass.meuMetodoComParametro("Teste")


e não vai por naaada!


Também tentei colocar


class DomainClass {
String atributo
String getMeuMetodoComParametro() { String variavel->
"o valor da variavel eh" + variavel }
static transients = ['meuMetodoComParametro']
}

Mas a IDE já critica como erro antes mesmo de "compilar"

Obrigado!
Tags: domain class metodo parametro dinamico


1
Olá, Rafael.

Nesse caso não se trata de um campo transiente e sim de um método comum. Só o reescreva com argumentos de método mesmo e vai funcionar sem problemas.

Também verifique se não é o caso de o método ser estático.


0
Maravilha total!

Obrigado!
25/02/2014 13:07


0
Funcionou, Rafael?


0
Funcionou sim. Não testei no projeto de verdade (vou fazer quando estiver em casa)

Fiz um teste em http://groovyconsole.appspot.com/ com a dica que você deu e sim, funcionou.



?class DomainClass {
String atributo
static String meuMetodoComParametro(String variavel) { "o valor da variavel eh" + variavel }

}

println DomainClass.meuMetodoComParametro("hakuna matata")
?


e o output foi

"o valor da variavel eh hakuna matata"


O que tenho lá é mais complexo, mas o fundamento acho que será o mesmo.

Mais uma vez, obrigado
25/02/2014 20:53


0
Funcionou sim, maaaaaaassssss nao quando o parametro eh uma lista

Aqui eh meu metodo estatico agora:
#DOMAIN

static contagem(String periodo, Integer nuMotv, ArrayList pessoas){
...
}


O estranho eh que funciona quando eu faco isso direto:

#CONTROLLER - FUNCIONA QND FIXO A LISTA

def contagem() {
def periodo = params["periodo"]?:"2014"
Integer nuMotv = params.int("nuMotv")?:2
List listaPessoas = [1,2,3,4,5,6,7,8,9] //FUNCIONA ASSIM

def result = Ocorrencia.contagem(periodo,nuMotv,listaPessoas) //Funciona quando eu passo os valores sem pegar dos parametros que recebo
...
}



masssss

Quando eu tento passar o parametro que recebo no params dah pau atras de pau

#CONTROLLER - NAO ENTENDO PQ NAO FUNCIONA


def contagem() {
def periodo = params["periodo"]?:"2014"
Integer nuMotv = params.int("nuMotv")?:2
List listaPessoas = params.list("pessoas")?:null

def result = Ocorrencia.contagem(periodo,nuMotv,listaPessoas) //Quando eu tento fazer dinamicamente nao funciona...
...
}



E o pior eh que quando eu acompanho os meus printlns para validar se estou recebendo o parametro, ele me diz que sim

#CONSOLE- RECEBE PARAMETRO

params -> [listaPessoas:[3, 1, 2], nuMotv:, periodo:, action:contagem, controller:ocorrencia]
listaPessoas -> [3, 1, 2]


... e mais abaixo dah os problemas
pelo que vi ele nao recebe os parametros como uma lista de integers
tentei forcar, vishe... usei int[] List<Integer> ArrayList....

#CONSOLE - ERROS QUE DA

o signature of method: legacy.Ocorrencia.contagem() is applicable for argument types: (java.lang.String, java.lang.Integer, java.util.Arrays$ArrayList) values: [2014, 2, [3, 1, 2]]
Possible solutions: contagem(java.lang.String, java.lang.Integer, java.util.ArrayList), create(). Stacktrace follows:
Message: No signature of method: legacy.Ocorrencia.contagem() is applicable for argument types: (java.lang.String, java.lang.Integer, java.util.Arrays$ArrayList) values: [2014, 2, [3, 1, 2]]
Possible solutions: contagem(java.lang.String, java.lang.Integer, java.util.ArrayList), create()
Line | Method
->> 97 | methodMissing in org.grails.datastore.gorm.GormStaticApi
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 16 | contagem in legacy.OcorrenciaController$$EOX2FRom
| 195 | doFilter . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 1145 | runWorker . . in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 722 | run . . . . . in java.lang.Thread


Alguma dica?

Obrigado
27/02/2014 03:25


0
Na assinatura do método "contagem()" troca "ArrayList" por "List" e veja se funciona.


0
Yoshi,
Como list foi a a primeira coisa que tentei.. e realmente é como deveria ser

Mas mesmo colocando isso estava dando problema pois os elementos da lista estavam sendo tratados como String (e deveriam ser Integer).

Cecei uma reposta que o Gabriel me deu uma vez aqui no Forum para converter uma List<String> em List<INteger> e funcionou legal!

Obrigado e que venha o próximo degraus rsss!
28/02/2014 13:06



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