VRaptor 3 - Problema ao passar um atributo Double em um objeto para minha Controller

8 respostas
K

Tenho uma classe chamada Banco com um atributo valorTarifa(Double), no formularia da jsp esse campo possui um mascara
e um javascript que deixam o valor neste formato enquanto o usuario digita o numero ou quando a pagina eh carregada para que o valor fique neste formato 1.000,00,
porem se eu salvar um valor neste formato ele chega como NULL na BancoController.

Isso funcionava no vraptor 2 como posso fazer isso no vraptor 3?

8 Respostas

Lucas_Cavalcanti

você vai precisar criar um conversor, porque vc tá usando outro padrão pro double (o VRaptor usa por padrão 1000.00)

@Convert(Double.class)
public class CustomDoubleConverter implements Converter<Double> {
     public Double convert(String value, ...) {
          if(value == null || value.equals("")) {
             return null;
          }
          return new NumberFormat("#.###,##").parse(value);
     }
}

ou algo do tipo… não lembro mto como usa o number format…

L
try{
return Double.parseDouble( value.replace(".","").replace(",",".") )
}catch(){
return null;
}
K

Quando passo um valor com virgula para minha controller na minha url ele fica assim

banco.valorTarifa=222.000%2C00

quando deveria se assim

banco.valorTarifa=222.000,00

Lucas_Cavalcanti

%2C deve ser o código da vírgula… é normal ele converter alguns caracteres pra %QQer coisa na url…

Você chegou a criar o converter?

G

Lucas, não seria legal o vraptor usar as conversões baseadas no locale definido pelo servidor, ou quem sabe configurado manualmente?

(voltei de férias, que droga, hahahahaha)

Abraços

L

Kcoelho…

se vc utilizar NICE URLs, tipo: produto/alterapreco/200.0
alguns caracteres serão substituídos por %algumacoisa

mas se vc usar: produto/alterapreco?preco=200.0
vc consegue receber os parametros sem essa alteração.

Lucas_Cavalcanti

@garcia-jj
Dá pra fazer isso sim… mas quebra compatibilidade pra tras… mas dá pra incluir na 3.2 qdo ela sair =)

G

A primeira idéia que tive foi de colocar um parametro no web.xml como vraptor.forcelocale=pt_BR. Caso tiver ele força o locale, caso contrário deixa como está fazendo o new Long(parametro).

Embora isso vá contra o principio de usar o menor número possível de configurações no xml.

Criado 16 de março de 2010
Ultima resposta 17 de mar. de 2010
Respostas 8
Participantes 4