Validar campo baseado em outro campo
18/10/2014 18:48
0
Olá a todos. Desculpem a pergunta aparentemente idiota, mas não consegui achar nem na documentação do Grails, nem aqui no Grails Brasil.

Preciso garantir que um campo seja preenchido caso um select anterior seja selecionado com um valor específico. Segue o que fiz até então para exemplo.
static constraints = {		
situacao blank:false, inList:['Ativo', 'Inativo', 'Aluno']
registro validator: {val, obj ->
if(obj.situacao == 'Ativo' && !val){
return ['registroObrigatorio']
}
}
}


O registro só deveria ser exigido se a situação for Ativo, mas no momento ele exige o registro independente da situação selecionada.

O que estou fazendo de errado?

Agradeço desde já qualquer ajuda.
Tags: Contraints


0
Olá Sidney,
Não tenho certeza, mas acredito que o validator tenha que retornar "true" ou "false", tente assim:

if(obj.situacao == 'Ativo' && !val){
return false
}else{ return true }

Normalmente eu costumo colocar as validações customizadas em um service e apenas chamalo na domain, no seu caso ficaria assim:

static constraints = {
situacao (blank:false, inList:['Ativo', 'Inativo', 'Aluno'])
registro (validator:{value, thiz, errors -> return thiz.validatorsService.registroValidator(value, thiz, errors)})
}

ai vc cria uma classe em "services" como esta:

class ValidatorsService {

def registroValidator = { value, autorizacaoInstance, errors ->
if(obj.situacao == 'Ativo' && !val){
errors.rejectValue( "registro", "chave_para_mensagem_de_error_do_i18n", [parametro1_para_mensagem_internacionalizada, parametroN_para_mensagem_internacionalizada] as Object[], "mensagem_padrão")
return false
}else{ return true }
}
}
20/10/2014 09:52



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