Pessoal,
Encontrei um bug nos converters de double e float. Como eles são localizados, dependendo da região a conversão não funciona.
Por exemplo, no Brasil, usamos a ',' como separador. Ao tentar converter "200,48" o resultado é 200,48 (correto), porém se o usuário digitar "200.48", a conversão retorna 20048.0 (errado), ou seja, ela ignora os caracteres desconhecidos. Isso acontece por que está sendo utilizado o
NumberFormat para a conversão (fonte).
Para uma solução rápida, eu criei uma classe com @Specializes e fiz a correção assim, no método convert (ficou parecido com a implementação do VRaptor 3):
try {
value = value.replace(",", ".");
return Double.valueOf(value);
} catch (NumberFormatException e) {
...
}
Essa não é a melhor forma de corrigir, pois estou ignorando o Locale.
Esse problema acontece nas classes DoubleConverter, FloatConverter, PrimitiveDoubleConverter e PrimitiveFloatConverter, todas do do pacote br.com.caelum.vraptor.converter