Validação de Datas com dois paramentros
01/11/2015 19:03
0
Boa tarde
Estou tentando validar  uma data de nascimento, para isso a data nao poderia deixar salvar uma data muito antiga, e nem uma data recente, ou seja, não pode ser maior que 90 anos e menos que 16.

Para validar datas estou usando o Validator, para travar outros campos data, que travam apenas datas retroativas, mas para esse caso pesquise e não encontrei nada que me ajude!
Coloquei este codigo para adaptações.

dataNascimento (validator: {return (it > new Date().clearTime())},blank:false)
Tags: Grails,Validator


0
Tente seguir esta resposta no SO:
http://stackoverflow.com/a/21131684
Ali ele valida para no mínimo 13 anos atrás, você só tem que alterar para 16 e acrescentar um outro teste similar, para restringir a não mais que 90 anos atras.


0
Fiz um teste com 2 anos pra ver se estava travando, e joguei tanto 5 anos a frente como 5 anos retroativos, e o sistema salvou normalmente. Talvez eu tenha esquecido de alguma coisa?!
nascimento validator: {
    use (TimeCategory) {
        it?.before(2.years.ago) 
    }
}
02/11/2015 18:32


0
Aparentemente está correto, apesar de que pelo exemplo dado, 5 anos atrás é uma data válida.
Acabei de testar isso no groovy console e funcionou, isto é, imprime true ou false apropriadamente dependendo da data.
Date d = new Date("11/03/1925")
?println use (groovy.time.TimeCategory) {
    d.before(16.years.ago) && d.after(90.years.ago)
}?


0
Seria uma data valida, se fosse apenas um registro de nascimento, mas a proposta desse campo nascimento, é para um trabalhador diarista do setor de construção civil. Então ao cadastrar o funcionário no sistema se ele for menor que 16 anos, o sistema deveria mostrar uma mensagem dizendo que a idade nao pode ser inferior a 16, ou maior que 90, o 90 é só parâmetro pra não por uma data muito antiga, tipo 1901.
02/11/2015 20:20


0
Faltou o return fera.
Vc tem que validar: se sua data ta OK? return true
se não tiver OK return false.

Se vc não colocar nenhum return ele considera que a informação é valida e insere.
http://grails.github.io/grails-doc/3.0.x/ref/Constraints/validator.html
Para mais esclarecimentos veja o LINK a cima! vai ajudar.


0
Para diferenciar a mensagem de erro, basta adicionar {objInstance}.errors.reject("mensagem de erro") na condição desejada


0
Não sei se o problema seria o return não, pois o Groovy implicitamente já considera o valor da última expressão avaliada como sendo o valor de retorno, se não houver um return explícito.
Outra coisa, ao invés de retornar true/false, que vai levar a um erro genérico, você também pode retornar strings que representam um código de erro, e null caso a validação esteja OK.
Ex:
nascimento: validator {
    use (groovy.time.TimeCategory) {
        if (it?.after(16.years.ago)) return "nascimento.muito.recente"
        if (it?.before(90.years.ago)) return "nascimento.muito.antigo"
    }
}



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