Duvida como validar compos
27/11/2010 00:00
0
Estou com a seguinte situação
No meu projeto tenho que realizar o agendamento de ações informando os atendimentos previstos e posteriormente realizar o fechamento da ação informando os atendimentos realizados. Assim eu coloquei dois atributos no minha classe de domain acaoInterna e habilitei a constraints atendimentosRealizados com nullable:true. Fazendo isso consegui salvar a ação.
Abaixo segue o codigo do domain:


package sisgaa

class AcaoInterna {

//Quantidade prevista de atendimento
Integer prevAtendimento
Integer atendimentosRealizados
static belongsTo = [acao: Acao]
static hasMany = [funcionariosEnv:Funcionario]

static mapping = {
acao lazy: false
acao cascade:"all-delete-orphan"
funcionariosEnv lazy: false
}


static constraints = {
prevAtendimento(blank:false)
atendimentosRealizados(nullable:true, blank:false, min:0)
}


}


package sisgaa

class Acao {
String nomeAcao
String objetivoGeral
String objetivoEspecifico
String publicoAlvo
String status
String relatorioFechamento
String dificuldadesEncontradas
Date dataInicio
Date dataFim
Date dataPrevFim
TipoAcao tipoAcao
UnidadeAtendimento unidadeAtendimento


static constraints = {
nomeAcao(blank:false)
objetivoGeral(blank:false,size:0..5000, widget:'textarea')
objetivoEspecifico(blank:false,size:0..10000, widget:'textarea')
publicoAlvo(blank:false,size:0..5000, widget:'textarea')
dataInicio(nullable:false)
dataFim(nullable:true)
relatorioFechamento(nullable:true, blank:false,size:5..5000)
dificuldadesEncontradas(nullable:true, blank:false,size:5..5000)
dataPrevFim()
status(inList:["Prevista","Em Andamento","Cancelada","Concluida"])
}

String toString(){
"$nomeAcao"
}
}

Agora meu problema esta na hora de finalizar a ação, pq como eu coloquei no constraints true não estou conseguindo usar o sistema de validação para as outras possibilidades, como se o campo for preenchido com String ou se for preenchido com numero negativo.
Ai até o momento a melhor solução que encontrei foi fazer o seguinte, fazer a validação usando um if e usar o rejectValue para passar o erro para a view atraves do renderErrors

def erros = false
if(params.atendimentosRealizados.equals("") ){
acaoInternaInstance.errors.rejectValue(
'atendimentosRealizados',
'acaoInterna.atendimentosRealizados.nullable.error',
'O campo Atendimentos Realizados não pode ficar em branco'
)
erros = true
}


Não sei se essa é a melhor solução, gostaria de saber se alguem tem alguma sugestão melhor para essa situação.
Desde já agradeço a todos.
Tags: Grails


0
Colocar validação no controlador não é uma coisa muito legal, porque o seu reaproveitamento de código vai cair muito.
Sugestão: implemente uma constraint customizada.

A melhor descrição que conheço sobre como fazê-lo está neste link: <!-- m --><a class="postlink" href="http://andresteingress.wordpress.com/2010/03/19/creating-custom-constraints/">http://andresteingress.wordpress.com/20 ... nstraints/</a><!-- m -->

Se mesmo assim estiver complicado, você pode, em último caso, modularizar es.ta validação criando um serviço específico pra ela


0
Outra solução seria usar command objects.



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