Customizando Validator em Grails

Neste artigo veremos como customizar um validator para um atributo específico em uma aplicação web feita em grails.

1. Introdução

Todos somos sabedores de que a consistência das informações em uma aplicação, seja ela web ou não, é coisa séria e que devemos estar sempre atentos para não passarmos batidos e incluirmos dados inconsistentes em nosso sistema gestor de base de dados. Como estamos falando especificamente de aplicações web feitas em Grails, quero compartilhar com vocês a forma com que esse framework valida suas informações, além de ensinar como customizar esse tipo de recurso, que é chamado de validator.

2. Validação no Grails

As validações de dados feito a nível de modelo no Grails são realizadas utilizando a API Spring Validator. Essa API, apesar de ser um pouco complexa de se utilizar, o Grails, através dos recursos dinâmicos da linguagem Groovy, simplifica essa tarefa disponibilizando para o desenvolvedor um mecanismo chamado de constraints que são declarações de regras de validações aplicadas a cada atributos do modelo que necessitem ser validados antes de serem persistidos.

Para entendermos melhor como tudo isso funciona, vamos analisar o seguinte código:

Listagem 1: Código inicial

class Contato { String nome String email static constraints = { nome(blank:false) email(blank:false,email:true) } }

No exemplo anterior, a classe Contato possui dois atributos: nome e email. Ambos não podem ser vazios e o atributo email só pode aceitar valor no padrão válido para email.

O Grails possui vários validators disponíveis para o desenvolvedor utilizar, como o próprio blank e email, além de size, inList, max, maxSize, min, minSize, notEqual, nullable, unique, url, etc. Porém existe um tipo especial que é utilizado para customizar sua própria validação, que se chama validator.

Para usar o validator customizado basta incluir um closure com a expressão de validação. Esse closure envia 2 parâmetros que são: o valor e a instância do modelo.

A expressão do closure deve retornar um dos seguintes valores:

Para o leitor entender melhor como tudo isso funciona, veja a seguir, um exemplo de customização de validator.

Listagem 2: Customização de Validator

class Teste { Integer diaSemana String finalSemana String sexo static constraints = { diaSemana (validator:{ value, object -> return value > 0 && value < 8 }) finalSemana (validator:{ value, object -> if (![‘sábado‘,’domingo’].contains(value)) { return ‘custom.erro.finalSemana’ } }) sexo (validator:{ value, object -> if (![‘M‘,’F’].contains(value)) { return [‘custom.erro.sexo’, value] } }) } }

Para concluir nosso exemplo, veja como fica o arquivo de mensagens presente no diretório i18n.

Listagem 3: Concluindo o exemplo

custom.erro.finalSemana=Valor não permitido, use sábado ou domingo. custom.erro.sexo=Valor inválido para sexo, use M ou F.

3. Conclusão

Como podemos perceber, validação de dados em Grails é muito simples de implementar. Além do framework disponibilizar vários validators, ainda podemos customizar esse recurso da maneira que acharmos necessário para manter a integridade das informações em nossos projetos. Também vimos que podemos mapear as mensagens de erro geradas pelos validators de maneira simples e direta, integrando esse recurso a um outro, também muito importante em uma aplicação web, que se chama internacionalização.

4. Referências

Grails - Validators. Disponível em: http://grails.org/doc/latest/ref/Constraints/validator.html. Acessado em: 07/04/2012

Grails - Validations. Disponível em: http://grails.org/doc/latest/guide/validation.html. Acessado em: 07/04/2012

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados