[quote=Lucas Cavalcanti]acho q ele não tá passando pelos converters… tenta colocar um breakpoint ou um log no seu converter e vê se ele está sendo chamado…
pode ser que seja um problema com a ordem q o VRaptor tá registrando os converters…
vc tá usando q versão do VRaptor? que provider?[/quote]
Ele não está passando pelo converters… vão direto para o hibernate validator… Estou usando versão 3.1
[quote=Lucas Cavalcanti]parece ser um bug então =(
no log de debug aparece um :
applying produto.valor with [1,1]
?[/quote]
Aparece sim.
Atualizei para a versão 3.2
Está aparecendo no log entre os applying.
18:27:00,594 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelum.vraptor.converter.PrimitiveIntConverter
18:27:00,587 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelum.vraptor.converter.PrimitiveDoubleConverter
Lucas, eu notei esse erro atualizando para a versão 3.2. Fiz um debug e os converters opcionais não estão sendo chamados, porém esse erro acontece apenas quando usamos o guice. No Spring não há esse erro.
cleison, qual o provider você está usando? Ou pelo menos você pode nos dizer se você tem os jars guice-snapshot, spring-xxx ou pico-xx?
Lucas, em um teste em uma aplicação minha notei que os converters não estavam sendo registrados. Quando voltei para o Spring tudo voltou a funcionar. Vou fazer mais uns testes para ver o que está acontecendo.
[quote=garcia-jj]cleison, qual o provider você está usando? Ou pelo menos você pode nos dizer se você tem os jars guice-snapshot, spring-xxx ou pico-xx?
Lucas, em um teste em uma aplicação minha notei que os converters não estavam sendo registrados. Quando voltei para o Spring tudo voltou a funcionar. Vou fazer mais uns testes para ver o que está acontecendo.
Abraços[/quote]
Tenho os jars do spring e picocontainer. O spring…tem que configurar alguma coisa no web.xml
[quote=Lucas Cavalcanti]não precisa configurar nada a mais no web.xml…
mas tire os jars do picocontainer[/quote]
Lucas retirei persiste o problema…tem mais algum jar que não pode está na lib?
[quote=Lucas Cavalcanti]trocar o setter pra string funcionou?
[code]
class Produto {
public void setValor(String valor) {
//codigo q tava no converter
}
}
[/code][/quote]
Funciona sim. Se mandar Double com ponto tambem adiciona normal.
Tenha algum outra forma de converter?
[quote=Lucas Cavalcanti]uma sugestão:
crie uma classe que representa valores em dinheiro.
usar double é a pior coisa que vc pode fazer, por causa dos erros de arredondamento.
crie a classe:
@Embeddable
public class Moeda {
private BigDecimal valor;
private Moeda() {} //pro hibernate não reclamar
private Moeda(String value) {
this.valor = BigDecimal.valueOf(value);
}
}
no Produto é só trocar o valor pra ser do tipo Moeda, e mudar os getters/setters, q o hibernate vai saber se virar
mude aquele converter de double pra ser um converter de Moeda, e usar o construtor pra criar a moeda.
futuramente vc pode colocar as operações de moeda nessa classe, bem como impressões formatadas e coisas do tipo
que acha?[/quote]
Mas se os converters não estão funcionando, desta forma tambem não irá… vou usar também objetos que receberá peso.
O que podemos fazer ainda… para tentar funcionar converters?
[quote=garcia-jj]Deixe-me entender… no seu web.xml está com o package scan para br.com.caelum.vraptor.converter.l10n, e usando double não funciona, BigDecimal sim?
O double que voce usava era o primitivo (double minusculo) ou objeto (Double com D maiusculo)?[/quote]
Isso mesmo Garcia… uma correção double primitivo não funfa o objeto sim (Double).
Uma outra duvida para tratar o ponto da mascara para valores inteiros ex 1.000.