Criando e alterando login - permissões no SQL Server 2008 R2
Customizando validator em grails
1. Atenção este é um post gratuito publicado no site da Devmedia e publicado no Slideshare na
conta da própria Devmedia. Sua republicação não é autorizada.
Para ler e outros artigos de seu interesse, acesse http://www.devmedia.com.br/
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
1 class Contato {
2
3 String nome
4 String email
5
www.devmedia.com.br – Todos os direitos reservados
2. 6 static constraints = {
7 nome(blank:false)
email(blank:false,email:true)
8
}
9
10
}
11
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:
o Null ou true: Indica que o valor e válido.
o Null: Indica que o valor é inválido e usa a mensagem de erro padrão.
o String: Código da mensagem de erro presente no arquivo de mensagens.
o Lista: Código da mensagem de erro presente no arquivo de mensagens com
seus argumentos.
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 {
1
2
Integer diaSemana
3
String finalSemana
www.devmedia.com.br – Todos os direitos reservados
3. 4 String sexo
5
6 static constraints = {
diaSemana (validator:{ value, object ->
7
return value > 0 && value < 8
8
})
9
finalSemana (validator:{ value, object ->
10
if (![‘sábado‘,’domingo’].contains(value)) {
11
return ‘custom.erro.finalSemana’
12 }
13 })
14 sexo (validator:{ value, object ->
15 if (![‘M‘,’F’].contains(value)) {
return [‘custom.erro.sexo’, value]
16
}
17
})
18
}
19
20
}
21
22
23
Para concluir nosso exemplo, veja como fica o arquivo de mensagens presente
no diretório i18n.
Listagem 3: Concluindo o exemplo
1 custom.erro.finalSemana=Valor não permitido, use sábado ou domingo.
2 custom.erro.sexo=Valor {0} inválido para sexo, use M ou F.
www.devmedia.com.br – Todos os direitos reservados
4. 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
www.devmedia.com.br – Todos os direitos reservados