GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[Resolvido] Vraptor 3.4.1 problema com @Converter

Bom dia a todos , estou passando por um problema estranho , tenho um atributo de uma classe que é um BigDecimal e quando passo no input 1.5 ele insiste em ficar convertendo pra 15 em vez de 1.5 não sei o motivo de estar ocorrendo isso , estou usando o pacote i10n no web.xml

<context-param>
	    	<param-name>br.com.caelum.vraptor.packages</param-name>
	    	<param-value>br.com.caelum.vraptor.converter.l10n,br.com.caelum.vraptor.http.iogi</param-value>
		</context-param>

ai tentei colocar debugar fazendo um Converter pra tentar ver o que pode estar acontecendo , só que o VRaptor nao esta registrando o Converter tambem que seria o outro problema estranho , segue código abaixo código do Converter :


@Convert(BigDecimal.class)
@ApplicationScoped
public class MyBigDecimalConverter implements Converter<BigDecimal>{

	@Override
	public BigDecimal convert(String value, Class<? extends BigDecimal> clazz,
			ResourceBundle resourcebundle) {
		System.out.println(value);
		if(Strings.isNullOrEmpty(value))
            return null;
        try
        {
            return new BigDecimal(value);
        }
        catch(NumberFormatException e)
        {
            throw new ConversionError(MessageFormat.format(resourcebundle.getString("is_not_a_valid_number"), new Object[] {
                value
            }));
        }
	}

}

Alguem tem ideia do que seja ? O porque dele converter 1.5 pra 15 e o porque de tambem não estar registrando o Converter ?

Bom resolvi o problema do converter retirando o pacote do web.xml e acertando o Converter pra só tentar converter quando precisar . Lucas enviei um pull request de um branch “converters” sobre isso no github da uma olhada lá depois , envolve outras melhorias nos Converters padrão do VRaptor.

Se você usa o pacote l10n, a separação de decimal para PT-BR é virgula, e não ponto.

O problema é que tenho campos que envio com virgula (que desejo que seja convertido) e outros envio com ponto e os dois dados são do tipo BigDecimal pela precisão que necessito e ai como fica nesse caso ? Da uma olhada num pull request que enviei pra ver se voce concorda com o código que escrevi ?

Se você precisa de campos que usam pontos e outros que usam virgulas, crie tiny types: http://blog.caelum.com.br/pequenos-objetos-imutaveis-e-tiny-types/

Assim você cria converter para cada tiny type.