Coloquei assim e funcionou, mas quando vai pegar do hibernate validator, ele não internacionaliza…
Agora eu não sei qual é a versão do hibernate validator, tou colocando minhas libs em anexo … eu retirei todos os hibernate validator que eu tinha visto, mas ele tá “pegando” a referência de algum local ainda.
Quando vou no netbeans adicionar o “jar” do Hibernate Validator 3.04 ele disse que já tá no local, estranho … mas deve ser essa versão que estou usando, então! O erro persiste =/
Coloquei o jar do “validation-api”, continua com a mesma mensagem sem internacionalizar
=/
L
Lucas_Cavalcanti
tenta importar de javax.validation
R
rafaelob
É para usar o javax validation ao invés do validation do hibernate?? Não consigo entender como ele continua importando as anotações do hibernate, mesmo sem a lib no projeto =/.
Vou fazer isso, então! O restante da lógica continua o mesmo. né?
Abs
L
Lucas_Cavalcanti
sim
R
rafaelob
Lucas,
Substitui as anotações por @NotNull e @Size do javax.validation e mesmo assim, continuo recebendo a mesma mensagem {dominio.vazio} ao invés da mensagem internacionalizada.
Tou usando o GlassFish 3.1 e na lib que vem com ele, tem o
“Bean-validator.jar” que tem o hibernate.validator e o javax.validator , por isso eu fiquei confuso quando tirei as referências dos hibernate validator e ele continuava achando …
Valeu pela ajuda, tou aqui na luta pra resolver isso!
L
Lucas_Cavalcanti
tenta criar um arquivo chamado ValidationMessages.properties, no mesmo diretório que o messages.properties, e coloca a internacionalização lah
R
rafaelob
Lucas,
Funcionou o “ValidationMessage.properties” , alguma convenção do vraptor não funcionou para o messages? O que aconteceu, ao certo?
Desculpa perguntar essas coisas, é que eu não consigo simplesmente receber a solução, sem entendê-la ehhe!
O Vraptor ao chamar o método validate, nem usa o stella validator cpf . Passei um CPF inválido e ele não apontou erros, acredito que não dê pra usar com o método validate.
L
Lucas_Cavalcanti
você está com os jars do hibernate validator 3 ou 4?
e nos dê o feedback se está funcionando, por favor
G
garcia-jj
Isso não é um bug do VRaptor não. O padrão do Bean Validator e Hibernate Validator é usar o ValidationMessages.properties.
R
rafaelob
Creio que a versão seja 4.1, ele tá no “BeanValidator” que vêm junto com a lib do glassfish 3.1, vou testar a nova versão do stella … A propósito, o site estava fora né?
Depurando eu vi que ele não aponta nenhum erro pro CPF e continua a lógica normal, mesmo passando um cpf inválido
A versão do hibernate validator é a 4.1 que veio com a lib “Bean Validator”
** Tirei a validação do “NotEmpty” e também não funcionou =/
M
mario.fts
oi rafaelob, tudo bem?
Nesse caso que você mostrou, o @NotEmpty funcionou ou nenhum dos dois?
[]'s
R
rafaelob
Olá,
O “NotEmpty” funcionou sim, só comentei que eu retirei ele e deixei só a anotação do Caelum.Stella.Bean.Validator , que não funcionou. As anotações do Hibernate Validator 4.1 , estão funcionando com o método validate(object). Só não consigo que a validação do Caellum Stella funcione, ele simplesmente ignora essa validação.
M
mario.fts
Oi Rafael
Eu realizei alguns testes aqui e funcionou normal, talvez seja alguma diferença de ambiente que não estamos percebendo.
Mudei do beta1 para o beta2 e funcionou perfeitamente.
Obrigado…
Att,
G
garcia-jj
Comentei já isso lá no Github, mas vou deixar aqui para quem precise. Isso não é um problema do VRaptor porque ele apenas delega ao Bean Validator. O padrão do Bean Validator é que o arquivo esteja no classpath com o nome ValidationMessages.properties e suas variantes. Qualquer implementação do Bean Validator vai procurar nesses locais, e isso não há como mudar.
A meu ver não é legal misturar um arquivo de mensagens da aplicação com o arquivo de mensagens de validação. Mesmo que desse para colocar tudo em um só, não é muito elegante não.
Maaaas… se mesmo assim você quiser, dá para fazer uma gambiarra muuuito feia. Detalhe que isso só funciona se você usar o Hibernate Validator 4 como implementação para Bean Validator, perdendo a portabilidade.
Você deve sobrescrever o componente MessageInterpolatorFactory no método createInterpolator:
@PostConstruct
public void createInterpolator() {
interpolator = new MyBizarreInterpolator();
logger.debug("Initializing JSR303 MessageInterpolator");
}
Depois crie a classe MyBizarreInterpolator usando a classe ResourceBundleMessageInterpolator como exemplo alterando o local do resource bundle a teu critério.
não é o VRaptor que faz isso, é o Bean Validations…
o certo não é usar {0}, é usar o nome da propriedade da anotação. Por padrão é value:
@Min(3) ==> ....maior ou igual a {value}
@Max(5) ==> ...menor ou igual a {value}
@Range(min=3, max=5) ==> ...entre {min} e {max}
Certo, entendi como deve ser usado.
Gostaria de levantar uma outra duvida, na empresa que trabalho eles mantem em um sistema pararelo todo o DER usado por seus sistemas. Assim é o próprio analista que informa qual será o label aplicado a cada campo e qual é nome de dominio da tabela e colunas.
Para facilitar a vida dos desenvolvedores, esse sistema exporta esses labels do banco seguindo esse padrao:
O detalhe que esse padrão não é o adotado pelo VRaptor para criar as mensagens de inconsistencias encontrados pelo Bean Validations. Que utiliza apenas o nome do atributo que apresentou algum problema.
Quero saber se há possibilidade através do componente do VRaptor customizar essa resolução da “categoria” da mensagem ou terei que implementar um outro componente de validacao usando a JSR303 e saiba o nome a setar ?
Aproveitando o tópico, gostaria de saber se tem como enviar um parametro para a mensagem em ValidationMessages.properties, usando o hibernate validator, tipo assim: