[Resolvido] Anotação @Validate na validação de CPF - Stella Caelum

Opa!
Valeu Garcia! :smiley:
Segui então esse formato na inserção dos dados, mas não está passando pela validação:

@CPF(message="CPF inválido, digite novamente")
	private String cpf;
	@Telefone(message="Telefone incorreto, digite novamente")
	private String telefone;
	@Telefone(message="Celular incorreto, digite novamente")
	private String celular;

Deixei apenas as mensagens, e coloquei no formato que vc passou. Mesmo assim diz que o cpf e os telefones estão incorretos.

O padrão para formatted é FALSE, ou seja, se o CPF que você está passando é formatado você precisa colocar formatted=true.

Pois é Garcia, eu fiz isso tb, passei o CPF como 081.675.457-75 e como 08167545775, mesmo assim não valida.
O telefone parece que é validado com o formato 2125474455 e não como 21.2547.4455.

Guevara, alguma coisa está errada aí. Note a classe de teste que tenho no projeto para validar se o CPF está correto:

http://github.com/garcia-jj/jsr303-br/blob/master/test/com/github/jsr303br/CPFTest.java

violations = validator.validate(new Cliente().setCpf1("652.493.248-00")); logger.debug(violations.toString()); Assert.assertTrue(violations.size() == 1);

public class Cliente { @CPF(formatted = true) public String cpf1; }

Agora entendi, deu boa, a validação faz o cálculo mesmo para saber se é válido ou não:
http://www.profcardy.com/artigos/cpf.php
Para alterar o formato do telefone para “21-9999-9999” eu não tô conseguindo:

@Telefone(format="99-9999-9999", message="Telefone incorreto, digite novamente")

Tô seguindo o exemplo da sua classe: http://github.com/garcia-jj/jsr303-br/blob/268684e9d550b381055061346ba5cc87a978893e/test/com/github/jsr303br/TelefoneTest.java
É isso mesmo?
Abraço!!

Lá no “format” do telefone eu coloco a expressão regular?

@Telefone(format=".-//d.-\\d\\d\\d\\d-\\d\\d\\d\\d",message="Telefone incorreto, digite novamente", formatted=true)

Tava precisando colocar os parênteses com o ddd ali:

16:35:44,970 DEBUG [OgnlParametersProvider] Applying proprietario.telefone with [(21)9999-9999]
16:35:44,971 DEBUG [OgnlParametersProvider] Applying proprietario.celular with [(21)8888-8888]

Abraço!

Putz, consegui, segui este tutorial aqui:
http://www.vaniomeurer.com.br/tag/javautilregex/
Ficou assim:

@Telefone(format=".\\d\\d.\\d\\d\\d\\d-\\d\\d\\d\\d",message="Telefone incorreto, digite novamente", formatted=true)

Abraço!! \o/

Oi Guevara. Como eu tinha te dito no outro post você deve usar expressões regulares. Vou ver se essa semana melhoro a documentação dele.

Abraços

Valeu Garcia!
Quando sair a documentação avise que eu vou baixar. =)
Esta validação ficou bem legal, tava pensando se seria possível fazer a validação para valores, anotar um atributo BigDecimal por exemplo. O problema seria o banco, pq o Hibernate cria a coluna como numeric(19,2) o valor fica assim 1504.00, ao invés de 1.504,00, pior ainda usando máscara no input. hehe
Abraço!!

Guevara, BigDecimal é sempre 1504.00 e não 1504,00. Quando você enxerga com virgulas isso é na verdade apenas uma representação do objeto formatado, mas não o objeto valor em sí. Se você quiser validar um valor como 1504,00 o seu campo precisa ser uma String ao invés de BigDecimal.

Saquei, mas o problema é a máscara:

jQuery("#real").maskMoney({symbol:"R$",decimal:",",thousands:"."}); 

Vai mandar com ponto e vírgula, ai não dá pra salvar no banco. Eu tava pensando em alguma anotação que retirasse o ponto do milhar e a virgula do decimal, colocando o ponto no lugar, isso poderia ser feito por anotação tb, senão vou ter que criar um método usando replace para formatar o valor corretamente antes de ser persistido.
Tenho até outro tópico sobre isso.
http://www.guj.com.br/posts/list/217654.java
Abraço

Guevara, você pode usar uma regex no próprio Bean Validator anotando a propriedade com @Regex e passando uma expressão regular que faça o trabalho.

Abraços

Oi Garcia!
Tô passando pra postar a solução:
Colocar no web.xml:

<context-param>  
     <param-name>br.com.caelum.vraptor.packages</param-name>      
     <param-value>br.com.caelum.vraptor.converter.l10n</param-value>  
 	</context-param>   

Vi essa dica postada pelo Lucas em outro tópico. :smiley:
Agora sim, posso usar a máscara JQuery para valores, ao digitar o valor ele é convertido de 2.500,00 para 2500.00, no formato que o banco espera receber.
Abraço!!

Ahh, agora eu entendi o que você queria, hehe :slight_smile:

Abraços

Guevara, como vc conseguiu resolver o problema do “javax.validation.ConstraintViolationException” a que se refere isso ?
Abraços