SlideShare uma empresa Scribd logo
1 de 4
Baixar para ler offline
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
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
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
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

Mais conteúdo relacionado

Semelhante a Customizando validator em grails

Javascript (parte 1)
Javascript (parte 1)Javascript (parte 1)
Javascript (parte 1)Alex Camargo
 
Data Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidData Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidVinícius Thiengo
 
Demoiselle Behave - Parte 4
Demoiselle Behave - Parte 4Demoiselle Behave - Parte 4
Demoiselle Behave - Parte 4Vanderson Silva
 
TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredJúlio de Lima
 
Palestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-AssuredPalestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-AssuredQualister
 
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com CodeceptionQualister
 
Segurança - 10 regras que você deve saber antes de migrar sua infraestrutura ...
Segurança - 10 regras que você deve saber antes de migrar sua infraestrutura ...Segurança - 10 regras que você deve saber antes de migrar sua infraestrutura ...
Segurança - 10 regras que você deve saber antes de migrar sua infraestrutura ...Amazon Web Services LATAM
 
Como criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersComo criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersElias Nogueira
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnapAndreano Lanusse
 
Twelve-Factor serverless applications - MAD302 - São Paulo AWS Summit
Twelve-Factor serverless applications - MAD302 - São Paulo AWS SummitTwelve-Factor serverless applications - MAD302 - São Paulo AWS Summit
Twelve-Factor serverless applications - MAD302 - São Paulo AWS SummitAmazon Web Services
 
Data Binding Android - Levi Saturnino
Data Binding  Android - Levi SaturninoData Binding  Android - Levi Saturnino
Data Binding Android - Levi SaturninoLevi Saturnino
 

Semelhante a Customizando validator em grails (20)

Teste Regressão
Teste RegressãoTeste Regressão
Teste Regressão
 
Groovy grails
Groovy grailsGroovy grails
Groovy grails
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Javascript (parte 1)
Javascript (parte 1)Javascript (parte 1)
Javascript (parte 1)
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Data Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidData Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI Android
 
Usando a data grid wpf
Usando a data grid wpfUsando a data grid wpf
Usando a data grid wpf
 
Aplicações web parte 2
Aplicações web parte 2Aplicações web parte 2
Aplicações web parte 2
 
Demoiselle Behave - Parte 4
Demoiselle Behave - Parte 4Demoiselle Behave - Parte 4
Demoiselle Behave - Parte 4
 
TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-Assured
 
Palestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-AssuredPalestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-Assured
 
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
 
Aula1
Aula1Aula1
Aula1
 
Segurança - 10 regras que você deve saber antes de migrar sua infraestrutura ...
Segurança - 10 regras que você deve saber antes de migrar sua infraestrutura ...Segurança - 10 regras que você deve saber antes de migrar sua infraestrutura ...
Segurança - 10 regras que você deve saber antes de migrar sua infraestrutura ...
 
Como criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersComo criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containers
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Iniciando com realm
Iniciando com realmIniciando com realm
Iniciando com realm
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnap
 
Twelve-Factor serverless applications - MAD302 - São Paulo AWS Summit
Twelve-Factor serverless applications - MAD302 - São Paulo AWS SummitTwelve-Factor serverless applications - MAD302 - São Paulo AWS Summit
Twelve-Factor serverless applications - MAD302 - São Paulo AWS Summit
 
Data Binding Android - Levi Saturnino
Data Binding  Android - Levi SaturninoData Binding  Android - Levi Saturnino
Data Binding Android - Levi Saturnino
 

Mais de Devmedia

Html básico
Html básicoHtml básico
Html básicoDevmedia
 
Devmedia - Conhecendo o framework front-end Foundation
Devmedia - Conhecendo o framework front-end FoundationDevmedia - Conhecendo o framework front-end Foundation
Devmedia - Conhecendo o framework front-end FoundationDevmedia
 
Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR Devmedia
 
Introdução a programação para plataforma iOS
Introdução a programação para plataforma iOSIntrodução a programação para plataforma iOS
Introdução a programação para plataforma iOSDevmedia
 
Introdução ao IBM Data Studio
Introdução ao IBM Data StudioIntrodução ao IBM Data Studio
Introdução ao IBM Data StudioDevmedia
 
Windows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internetWindows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internetDevmedia
 
Verificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows PhoneVerificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows PhoneDevmedia
 
E-book sobre HTML 5 (Devmedia)
E-book sobre HTML 5 (Devmedia)E-book sobre HTML 5 (Devmedia)
E-book sobre HTML 5 (Devmedia)Devmedia
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em JavaDevmedia
 
Criando e alterando login - permissões no SQL Server 2008 R2
Criando e alterando login - permissões no SQL Server 2008 R2Criando e alterando login - permissões no SQL Server 2008 R2
Criando e alterando login - permissões no SQL Server 2008 R2Devmedia
 

Mais de Devmedia (10)

Html básico
Html básicoHtml básico
Html básico
 
Devmedia - Conhecendo o framework front-end Foundation
Devmedia - Conhecendo o framework front-end FoundationDevmedia - Conhecendo o framework front-end Foundation
Devmedia - Conhecendo o framework front-end Foundation
 
Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR
 
Introdução a programação para plataforma iOS
Introdução a programação para plataforma iOSIntrodução a programação para plataforma iOS
Introdução a programação para plataforma iOS
 
Introdução ao IBM Data Studio
Introdução ao IBM Data StudioIntrodução ao IBM Data Studio
Introdução ao IBM Data Studio
 
Windows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internetWindows Phone: Verificando a conexão com a internet
Windows Phone: Verificando a conexão com a internet
 
Verificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows PhoneVerificando a conexão com a internet no Windows Phone
Verificando a conexão com a internet no Windows Phone
 
E-book sobre HTML 5 (Devmedia)
E-book sobre HTML 5 (Devmedia)E-book sobre HTML 5 (Devmedia)
E-book sobre HTML 5 (Devmedia)
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em Java
 
Criando e alterando login - permissões no SQL Server 2008 R2
Criando e alterando login - permissões no SQL Server 2008 R2Criando e alterando login - permissões no SQL Server 2008 R2
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