JSF <f:numberConverter> [AJUDA]

Dei uma procurada aqui no forum e vi que muitas pessoas jah tiveram o mesmo problema que eu estou tendo agora, tentei as solucoes que encontrei por aqui, mas nenhuma serviu para o problema que estou tendo.

Seguinte, estou tendo usar o validador padrao do jsf (estou usando myfaces 1.2.2) para converter um input (moeda) para um double. Estou tentando usar um input de um valor asism:

                <h:outputText value="Valor Diárias: " />
                <rich:inplaceInput id="valorDiarias"
                                   value="#{PlanejamentoMB.valorDiarias}"
                                   required="true"
                                   requiredMessage=" Digite estimativa do valor das diárias."
                                   validatorMessage=" O valor digitado das diárias não é valido."
                                   converterMessage=" Campo 'Valor Diárias' inválido."
                                   defaultLabel="Clique aqui e digite">
                    <f:convertNumber type="currency" />
                </rich:inplaceInput>

soh o que acontece eh o seguinte:

quando eu coloco no input um valor por exemplo “1500,00” o conversor esta dizendo que o campo é invalido, o conversor soh esta aceitando os valores digitados se eu colocar o simbolo da moeda na frente tipo “R$ 1500,00”

eu ja tentei fazer como um user sugeriu colocar a tag:

<f:convertNumber type="currency" currencySymbol="" />

mas mesmo assim, ele soh esta aceitando valores quando eu coloco o simbolo da moeda na frente, e eu nao quero fazer o usuario ter que digitar esse simbolo, quero que o usuario somente digite “1500,00”

o que faco??

[]'s

tb tive problemas parecido, por isso só uso o <f:convertNumber type=“currency” /> em <h:outputText />

eu fiz o seguinte converter:


import java.text.NumberFormat;
import java.util.Locale;
import java.util.regex.Pattern;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;

public class ValorEmRealConverter implements Converter{

	 public Object getAsObject(FacesContext arg0, UIComponent arg1, String valorTela) throws ConverterException {  
		   
			if(valorTela == null || valorTela.toString().trim().equals("")){  
	            return 0.0d;  
	  
	        } else { 
	       	 try{
	       		
	       		if(valorTela.contains(".")){
	       			valorTela.length();
	       			char[] valor = valorTela.toCharArray();
	       			int indice1 = valorTela.length() - 3;
	       			Character x = valorTela.charAt(indice1);
	       			if(x.equals('.')){
	       				valor[indice1] = ',';
	       			}
	       			int indice2 = valorTela.length() - 2;
	       			x = valorTela.charAt(indice2);
	       			if(x.equals('.')){
	       				valor[indice1] = ',';
	       			}
	       			valorTela = new String(valor);
	       			if(valorTela.contains(",")){
	           			valorTela = valorTela.replaceAll(Pattern.quote("."), "");  
	                    String novoValor = valorTela.replace(",", ".");
	                    return new Double(novoValor);  
	           		}
	       		}
	       	 
	       	 	}catch (Exception e) {
	               	 throw new ConverterException("Valor inválido");
	       		}
	       
	       		
	       	try{
	       		valorTela = valorTela.replaceAll(Pattern.quote("."), "");  
	            String novoValor = valorTela.replace(",", ".");
	            return new Double(novoValor);  
	  
	            }catch (Exception e) {
	           	 throw new ConverterException("Valor inválido");  
	         }  
	        }  

     }  
   
     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);  
             nf.setMinimumFractionDigits(2);
             return nf.format(Double.valueOf(valorTela.toString()));  
         }  
     }  
} 

ai nos input coloco: <h:inputText value="#{meuBean.moeda}" conveter="realConveter"/>

No entanto tb gostaria de saber a solução para esse problema

Att, Dirceu

pq em vez de currency simplesmente não usa um float?

olhem o ultimo exemplo daqui:
http://www.javabeat.net/articles/53-using-converters-in-jsf-2.html

[quote=bobmoe]pq em vez de currency simplesmente não usa um float?

olhem o ultimo exemplo daqui:

nao da para usar esse validador pq o separador de casas decimais eh ponto e aqui no brasil o padrao eh a virgula.

DirceuSobrinho,
Cara valeu, usei o teu conversor e deu tudo certo.

Vou deixar o topico em aberto (com a tag ajuda la em cima), porque talvez alguem saiba resolver este problema usando apenas os conversores padroes do JSF

Se alguem souber, sinta-se a vontade para postar :slight_smile:

[]'s

Pessoal,

Como o tópico ainda está em aberto estarei respondendo, apesar de fazer muito tempo. :smiley:

Substituir a seguinte tag:

<f:convertNumber type="currency" />

por esta:

<f:convertNumber pattern="#,##0.00" minFractionDigits="2"  />

[]'s

1 curtida