Hibernate Validator Sempre Validando, inclusive em Pesquisas

5 respostas
rodrigoacb

Olá!

Ao usar anotação do Hibernate Validator em propriedades de uma Entity, quando essas propriedades são colocadas numa página de pesquisa e o botão com ação “pesquisar” é acionado, tais propriedades são validadas.

O único jeito de contornar e/ou resolver esse problema é usando um DTO/VO contendo apenas os filtros de pesquisa?

Obs: estou usando primefaces na apresentação.

Não sei se fui claro.
Obrigado!

5 Respostas

wbdsjunior

rodrigoacb:
Olá!

Ao usar anotação do Hibernate Validator em propriedades de uma Entity, quando essas propriedades são colocadas numa página de pesquisa e o botão com ação “pesquisar” é acionado, tais propriedades são validadas.

O único jeito de contornar e/ou resolver esse problema é usando um DTO/VO contendo apenas os filtros de pesquisa?

Obs: estou usando primefaces na apresentação.

Não sei se fui claro.
Obrigado!

Use a propriedade immediate=“true” no command[Button|Link]. Isso fará com a fase de validação do JSF seja ignorada.

Não sei se é a melhor, mas essa foi a primeira referencia que achei no Google: http://marcusmazzo.wordpress.com/2008/12/13/ciclo-de-vida-jsf

rodrigoacb

Usei facelet (abaixo)

<f:validateLength maximum=“300”/>

em vez de hibernate validator (abaixo)

@Size(max = 300)

Funcionou normalmente.
Só não sei como mudar a mensagem da validação facelet. Vou pesquisar. Alguém sabe?

E qual seria vantagem de usar o hibernate validator, visto que ele faz a validação para quaisquer requisições/submissões de formulário e não apenas para operações de inclusão/alteração?

wbdsjunior

http://www.guj.com.br/java/148428-personalizar-mensagens-validator-jsf—longrangevalidator

rodrigoacb:

E qual seria vantagem de usar o hibernate validator, visto que ele faz a validação para quaisquer requisições/submissões de formulário e não apenas para operações de inclusão/alteração?

A questão não é “Qual a vantagem” mas “Como o JSF/BeanValidation sabe que você fez um requisição para inclusão/alteração dos dados”? Não há como saber. Por isso ele valida sempre e você deve informar manualmente que não quer validar os dados naquela requisição, colocando o atributo “immediate=true” no command[Button|Link]. Sacou?

rodrigoacb

Hmm… foi o que imaginei…
Bom, não sou fã do immediate=true. Gosto de usar só em caso muito específico.
Neste caso, tratando-se de campos que servem de filtro numa funcionalidade, acho preferível usar a validação do facelet (citado acima por exemplo) e descartar o uso do hibernate validator.

rodrigoacb

ah! e obrigado! pelo reply e link citado

Criado 17 de junho de 2013
Ultima resposta 18 de jun. de 2013
Respostas 5
Participantes 2