Validação automática de Converters JodaTime

85 views
Skip to first unread message

Angelo Albiero Neto

unread,
May 21, 2012, 10:49:09 AM5/21/12
to caelum-...@googlegroups.com
Fala galera, tudo certo?

O Vraptor por padrão possui alguns converters para o JodaTime. Quando é atribuído uma string inválida para um LocalDateTime, o Vraptor adiciona um erro de validação. Neste caso ele procura a string "is_not_a_valid_datetime" em suas mensagens internacionalizadas e devolve a mensagem.

A mensagem segue o seguinte formato: 

O campo #{propriedade} #{is_not_a_valid_datetime}

O problema é que o meu objeto tem uma propriedade com o nome "end" e não gostaria que a mensagem fosse "O campo end é inválido".
Eu quero internacionalizar o nome da propriedade, tendo como resultado "O campo final é inválido". 

Olhei no código do Vraptor, o responsável pela atribuição do erro de validação no request está na classe VraptorInstantiator e método instantiate(Target<?> target, Parameters parameters). Neste método o vraptor instancia um ValidationMessage simples.

O Vraptor não poderia procurar por padrão em seu arquivo de mensagens internacionalizadas o nome dos campos?
Dificilmente eu deixaria o nome do campo em uma validação.

Lucas Cavalcanti

unread,
May 21, 2012, 8:02:08 PM5/21/12
to caelum-...@googlegroups.com
Abre lá uma issue pra isso:

ou manda um pull request ;)

mas em todo caso vc pode criar a mensagem no jsp com:

O campo <fmt:message key="${error.category}" /> ${error.message}

ou o equivalente se vc estiver usando velocity ou freemarker...

2012/5/21 Angelo Albiero Neto <angelo...@gmail.com>

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To view this discussion on the web visit https://groups.google.com/d/msg/caelum-vraptor/-/eB0usXAhgGUJ.
To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/caelum-vraptor?hl=en.

Angelo Albiero Neto

unread,
May 22, 2012, 12:39:25 PM5/22/12
to caelum-...@googlegroups.com
Lucas, 

Mandei um pull request. Da uma olhada lá :-)



On Monday, 21 May 2012 21:02:08 UTC-3, Lucas Cavalcanti wrote:
Abre lá uma issue pra isso:

ou manda um pull request ;)

mas em todo caso vc pode criar a mensagem no jsp com:

O campo <fmt:message key="${error.category}" /> ${error.message}

ou o equivalente se vc estiver usando velocity ou freemarker...
2012/5/21 Angelo Albiero Neto <angelo...@gmail.com>
Fala galera, tudo certo?

O Vraptor por padrão possui alguns converters para o JodaTime. Quando é atribuído uma string inválida para um LocalDateTime, o Vraptor adiciona um erro de validação. Neste caso ele procura a string "is_not_a_valid_datetime" em suas mensagens internacionalizadas e devolve a mensagem.

A mensagem segue o seguinte formato: 

O campo #{propriedade} #{is_not_a_valid_datetime}

O problema é que o meu objeto tem uma propriedade com o nome "end" e não gostaria que a mensagem fosse "O campo end é inválido".
Eu quero internacionalizar o nome da propriedade, tendo como resultado "O campo final é inválido". 

Olhei no código do Vraptor, o responsável pela atribuição do erro de validação no request está na classe VraptorInstantiator e método instantiate(Target<?> target, Parameters parameters). Neste método o vraptor instancia um ValidationMessage simples.

O Vraptor não poderia procurar por padrão em seu arquivo de mensagens internacionalizadas o nome dos campos?
Dificilmente eu deixaria o nome do campo em uma validação.

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To view this discussion on the web visit https://groups.google.com/d/msg/caelum-vraptor/-/eB0usXAhgGUJ.
To post to this group, send email to caelum-vraptor@googlegroups.com.
To unsubscribe from this group, send email to caelum-vraptor+unsubscribe@googlegroups.com.

Lucas Cavalcanti

unread,
May 22, 2012, 1:02:57 PM5/22/12
to caelum-...@googlegroups.com
Comentado ;)

2012/5/22 Angelo Albiero Neto <angelo...@gmail.com>
To view this discussion on the web visit https://groups.google.com/d/msg/caelum-vraptor/-/_ivQ9c8RMRAJ.

To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.

Otávio Garcia

unread,
May 22, 2012, 6:02:09 PM5/22/12
to caelum-...@googlegroups.com
Tem uma coisa... muitas pessoas já estão usando da forma atual, eu mesmo sou um que nos meus sistemas eu marco o campo com erro (css border red) e coloco o label ao lado "deve ser um valor inteiro".

Agora com essa mudança ficará "O campo nome deve ser um inteiro", pelo que entendi. Isso vai influenciar no que já existe e que outras pessoas usam, então acho que é melhor faz um componente separado para que o atual permaneça como está, e quem quer usar desta forma use outro componente.

2012/5/22 Lucas Cavalcanti <lucasm...@gmail.com>

Angelo Albiero Neto

unread,
May 23, 2012, 12:44:20 PM5/23/12
to caelum-...@googlegroups.com
Otávio, blz?

A mudança não impactará em seu problema. A única diferença será a internacionalização da "category" quando o Vraptor lançar um ConversionError.
Você poderá usar o ${error.message} normalmente em seus campos marcados com css.

Eu mandei um pull request, da uma olhada no código que você irá entender como funcionará.

Vlw! 

Otávio Garcia

unread,
May 23, 2012, 9:52:38 PM5/23/12
to caelum-...@googlegroups.com
Se internacionalizar o category ao invés de eu receber o nome do campo para eu poder marcar o campo com erro, eu receberei um Label. Isso quebraria minha aplicação, assim como provavelmente a de outros usuários. O que eu faço nas minhas apps é buscar o campo pelo category, marcar o campo com um CSS indicando erro, e mostro uma mensagem do lado dele. Se eu receber apenas um label, como eu vou fazer isso?

Note que esta alteração vai também impactar no plugin do Dennys, neste link: https://github.com/dennysfredericci/vraptor-taglib, pois este plugin faz algo parecido com o que eu faço nas minhas apps.

Eu discordo desta alteração, pelo menos da forma que ela foi feita. Eu sugiro que você use a sugestão do Lucas. Mas se mesmo assim você quer algo no VRaptor, talvez seja legal adicionar um campo novo no Message, quem sabe um getLocalizedLabel, ou algo assim.

Abraço

Angelo Albiero Neto

unread,
May 24, 2012, 12:18:20 AM5/24/12
to caelum-...@googlegroups.com
Otávio, blz?

Muito bom o seu argumento. Agora entendi realmente o seu problema.
Você viu no pull request que caso você não internacionalize o campo, o comportamento em caso de ConversionError é o padrão, com isso, não quebraria nada o seu código. Porém, caso você quisesse internacionalizar o campo, no seu caso, você precisaria buscar o campo pela category internacionalizada. Talvez essa busca pela category internacionalizada não seja tão legal mesmo, principalmente se a internacionalização possuir acentuação.

O que você que poderia ser feito neste caso?

Vlw pelo feedback!
Message has been deleted

Angelo Albiero Neto

unread,
May 24, 2012, 10:40:14 AM5/24/12
to caelum-...@googlegroups.com
Você acha que adicionar um campo getLocalizedCategory na interface Message é legal? Acho que na implementação 18nMessage seria melhor.

Lucas Cavalcanti

unread,
May 24, 2012, 11:00:12 AM5/24/12
to caelum-...@googlegroups.com
no I18Message seria melhor, não faz sentido no ValidationMessage, já que ele não recebe o bundle

2012/5/24 Angelo Albiero Neto <angelo...@gmail.com>
--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To view this discussion on the web visit https://groups.google.com/d/msg/caelum-vraptor/-/YsSHjJwBLKAJ.

To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.

Angelo Albiero Neto

unread,
May 24, 2012, 1:30:34 PM5/24/12
to caelum-...@googlegroups.com
Lucas, blz?

O Otávio mostrou um ponto de vista importante a respeito dessa mudança.
Ao meu ver acho que é papel do Vraptor internacionalizar a category, já que ele já faz isso para o message. Com o <fmt:message> você está "terceirizando" o que o Vraptor ja faz em partes. O que você acha? Senão ficamos com o fmt:message mesmo.

Vlw pelo feedback no pull request :-)

To post to this group, send email to caelum-vraptor@googlegroups.com.
To unsubscribe from this group, send email to caelum-vraptor+unsubscribe@googlegroups.com.

Lucas Cavalcanti

unread,
May 24, 2012, 1:38:45 PM5/24/12
to caelum-...@googlegroups.com
a category não é uma mensagem, é o lugar onde aconteceu o erro.
Faz parte da lógica da sua aplicação usar isso como parte da mensagem ou não...

ou seja, o VRaptor não deveria i18nalizar automaticamente.

por exemplo vc pode procurar um input com o name="produto.${error.category}", que é o campo onde deu o erro.

To view this discussion on the web visit https://groups.google.com/d/msg/caelum-vraptor/-/t1n2iV-wm3QJ.

To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.

Angelo Albiero Neto

unread,
May 24, 2012, 2:33:55 PM5/24/12
to caelum-...@googlegroups.com
Verdade! Eu estava analisando sempre no contexto da category fazer parte da mensagem.
Então resolvido! 

Vlw pelas dicas Lucas e Otávio!

Fechei o pull request!

Otávio Garcia

unread,
May 25, 2012, 10:47:42 AM5/25/12
to caelum-...@googlegroups.com
Desculpe a demora em responder.

Mas acho que o Lucas já passou o que eu queria dizer. Complementando, o vraptor sabe qual o campo deu erro porque ele recebe isso nos parametros. Porém o label do campo, é algo que fica na view, por isso penso eu que quem deve internacionalizar o label deve ser a view.

Abraço

To view this discussion on the web visit https://groups.google.com/d/msg/caelum-vraptor/-/aZuPm7x6OT8J.

To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages