Validar Lista de Command
25/06/2013 22:54
0
Boa noite galera.

Estou passar por um problema, que não encontro solução, por isso recorro a vocês novamente.

Tenho um CommandObject que é populado atraves de um arquivo excel. Ao fazer a leitura eu vou armazenando em uma lista [] os CommandObjects, um a um, até terminar a leitura. Antes de fazer a persistencia preciso validar eles, mas não entra na validação. Vejam o código.


result.each {Map value ->
def command = new UploadCommand()

value.each { key, val ->

if(val instanceof org.joda.time.LocalDate)
command."${key}" = val.toDate()
else
command."${key}" = val

}
lista.add(command)

}

//Validação
lista.each { UploadCommand termo ->
if(termo.hasErrors())
println(termo.errors.allErrors)
}


Mas ele nunca valida e ainda me traz a seguinte mensagem:


No signature of method: br.com.meuprojeto.commons.command.UploadCommand.hasErrors() is applicable for argument types: () values: [] Possible solutions: hashCode().


Espero que possam me ajudar.

Obs.: Estou forçando entradas com erro para garantir que isso que vos falo realmente procede. :)
Tags: controller, command objects, validate, hasErrors


0
Não tenho costume de trabalhar com objetos Command, mas, lendo a documentação (http://grails.org/doc/latest/guide/theWebLayer.html#commandObjects), vi a seguinte declaração: "A class is only considered to be a command object when it is used as a parameter of an action.". Será que não é esse o problema?
26/06/2013 12:09


0
André ótima observação.

O Command, como vimos segundo a doc, é um objeto que quando passado por parâmetro de uma action, ele o instancia e o valida. No meu caso, esta ação não pode ocorrer pois meu formulário contém apenas um file e uma descrição, ao fazer o data binding ele nunca passaria na validação. A dúvida que deixo agora, e que irei iniciar a pesquisa neste momento sobre isso, é como posso realizar a validação dos itens existentes em meu arquivo que faço upload. Eu possuo regras de negócio que devem ser satisfeitas antes que exista a persistência dos dados. Ontem analisando pensei em extarnalizar essas regras em uma service e as chamar dentro de um objeto POJO. Só que lí na doc que posso marcar um POJO, ou qualquer outra classe, com a anotação @Validation e usufruir das mesmas vantagens, agora estou na dúvida em como proceder. Talvez usar Spring 'puro'?

Se tiver alguma sugestão será muito bem vinda André.


0
Você pode usar seu pojo, realizar o dataBind na mão mesmo e fazer um custom validator nele (http://grails.org/doc/latest/guide/validation.html#constraints), onde verificará todas as questões internas do arquivo.
Se achar que seu pojo vai ficar sujo ou algo assim, é uma ideia utilizar outra classe com o @Validation como você mesmo sugeriu. De qualquer forma, nesta classe, você teria que criar um custom validator para tal, acho que cairia na mesma questão.
Tenho costume também de utilizar um service para salvar objetos com uma regra de negócio mais complexa, jogando exceções de validação caso ocorra erro para o Controller tratar (ValidationException). Você poderia criar um método save que receberia os parâmetros necessários e faria o tratamento desejado.
26/06/2013 14:13



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