Hibernate Validator Sempre Validando, inclusive em Pesquisas

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!

[quote=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![/quote]

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

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?

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

[quote=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?[/quote]

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?

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.

ah! e obrigado! pelo reply e link citado