Problemas com JSF e convertNumber [RESOLVIDO]

2 respostas
A

Senhores :smiley:
Esto quebrando a cabeça com uma coisa muito simples.
Tenho um campo de valor que é um Double, o código está assim no jsp:

<h:inputText required="false" value="#{PropostaBean.valorFinanciamento}" id="Valor"> <f:convertNumber locale="pt_BR"/> </h:inputText>

Se eu digitar “150,25” no campo, ele vai normal, mas se eu digitar “150” ou “150,00”, recebo a mensagem “Erro de conversão “Valor”: Ocorreu um erro de conversão.”

Ou seja, só está funcionando quando coloco um numero que não é inteiro.
Por que isso? Como posso contornar esse problema?

2 Respostas

A

Opa... Resolvido ;)

Teve um pouco de trabalho, mas ficou legal.
Pelo que vi, o JSF interpreta oq vc digita e passa um Long ou Double. Quando é Double td bem, mas quando ele tenta jogar um Long em um Double dá erro, ai tive que fazer o meu próprio Converter.
A classe ficou assim:

public class MyDoubleConverter implements Converter {

	public Object getAsObject(FacesContext arg0, UIComponent arg1, String valorTela) throws ConverterException {

		if(valorTela == null || valorTela.toString().trim().equals("")){
			return 0.0d;

		} else {
			valorTela = valorTela.replaceAll(Pattern.quote("."), "");

			try{
				NumberFormat nf = NumberFormat.getInstance();
				nf.setMaximumFractionDigits(2);

				return nf.parse(valorTela.replace(",", ".")).doubleValue();

			}catch (Exception e) {
				return 0.0d;
			}
		}
	}

	public String getAsString(FacesContext arg0, UIComponent arg1, Object valorTela) throws ConverterException {

		if(valorTela == null || valorTela.toString().trim().equals("")){
			return "0,00";

		} else {
			NumberFormat nf = NumberFormat.getInstance(new Locale("pt", "BR"));
			nf.setMaximumFractionDigits(2);

			return nf.format(Double.valueOf(valorTela.toString()));
		}
	}
}

No faces-config.xml :

<converter>
	<converter-id>MyDoubleConverter</converter-id>
	<converter-class>com.converters.MyDoubleConverter</converter-class>
</converter>

No jsp:

<h:inputText value="#{PessoaBean.valor}" >
	<f:converter converterId="RuralDoubleConverter" />
</h:inputText>

Isso resolve o problema, que na minha opnião, o JSF já devia tratar automaticamente 8)

S

Queria tirar uma duvida pois fiz da mesma forma que voce mostrou mais nao deu certo
to precisando efetuar calculos monetarios com valores double com isso queria
e o formato fosse ex: “10,50” dez reais e ciquenta centavos, mais esta sendo gravado em
banco como “10.5”, se eu digitar 10.51 ou qualquer outro numero menos o zero da certo
voce pode me ajudar e resolver esse problema?

Atenciosamente

Criado 26 de junho de 2007
Ultima resposta 5 de nov. de 2009
Respostas 2
Participantes 2