Formatar Double no validator

1 resposta
J

Pessoal,

Tenho um campo que o padrão dele eh dinherio (R$)

Ex. 1.000,00.
Meu validator está assim + não formata corretamente.

<field property=“exchangeInvoiceAmount” depends=“double,maxlength”>

<arg0 key=“Valor da Fatura (R$)” resource=“false”/>

<var><var-name>pattern</var-name><var-value>###,##0.00</var-value></var>

<var><var-name>decSep</var-name><var-value>,</var-value></var>

<var><var-name>grpSep</var-name><var-value>.</var-value></var>

<msg name=“double” key=“errors.invalid”/>

<var><var-name>maxlength</var-name><var-value>18</var-value></var>

<arg1 key=“18” resource=“false”/>

<msg name=“maxlength” key=""/>

</field>

Mas esse código não está funcionando, se o usuario digitar letra, ele deixa passar.

Como faço para validar esse campo como se ele fosse um Double???

Att.

1 Resposta

R

Não sei se te ajudaria fazer essa validação no código...
Como eu trabalho com Struts executo esse metodo no FORM, mas vc poderia adaptar onde achasse melhor:

public boolean validaMoeda&#40;String valor&#41; &#123; //valida até 999.999,99
      boolean validar = true;
      int len = valor.length&#40;&#41;; // retorna qtde caracters
      int ponto = valor.indexOf&#40;'.'&#41;; // retorna 1 se existir ponto e -1 se não existir
      
      if &#40;ponto != -1&#41;&#123; //se existir ponto 
          System.out.println&#40;&quot;não use . &quot;&#41;;         
	  validar = false;   //termina o metodo       
      &#125;
      else&#123; // se não existir ponto verificaremos a virgula
          int virgula = valor.indexOf&#40;','&#41;; // retorna 1 se existir -1 se não existir      
          if &#40;virgula != -1&#41;&#123; //se existir...
              System.out.println&#40;&quot;virgula digitada&quot;&#41;;
              if &#40;len&gt;9&#41;&#123; //verificamos qtde de caracters digitados
                  System.out.println&#40;&quot;valor invalido &gt; 999999,99&quot;&#41;;		
 	                    validar = false; // e se for maior q 9 &#40;pq inclui a virula&#41; termina o metodo
              &#125;
              else&#123; //se não se qtde caracters for valida
                  try &#123;
                      int posVirg = &#40;len - 3&#41;; //retorna posição da virgula
                      char virg = valor.charAt&#40;posVirg&#41;; // retorna o caracter posicionado na virgula
                      if &#40;virg != ','&#41; &#123; // se esse caracter não for uma virgula
                          System.out.println&#40;&quot;virgula não esta posicionada na casa decimal correta&quot;&#41;;
                          validar = false; //termina o metodo
                      &#125;
                      else&#123; //senão se  esse caracter for de fato uma virgula
                          String antes = valor.substring&#40;0,valor.indexOf&#40;','&#41;&#41;; //recebe conteudo antes virgula        
	                  String depois = valor.substring&#40;valor.indexOf&#40;&quot;,&quot;&#41;+1&#41;; //recebe conteudo após virgula
                          Integer.parseInt&#40;antes&#41;; // valida pra ver se é um numero
		          Integer.parseInt&#40;depois&#41;;
                      &#125;
                  &#125;
                  catch &#40;Exception e&#41; &#123; //caso não for numerico, ocorrera um erro e esse catch trata o valor não numerico
                      validar = false;
                  &#125;
                   finally&#123;
                       return validar; // retornando o status false do boolean
                   &#125;
                  
              &#125;
              
          &#125;
          else&#123; // sem virgulas
              if &#40;len&gt;6&#41;&#123; // sem virgulas só é possivel uma entrada menor do valor
                  System.out.println&#40;&quot;valor invalido &gt; 999999&quot;&#41;;
                  validar = false;
              &#125;
              else&#123;
                  try &#123;
                      Integer.parseInt&#40;valor&#41;; //sem virgula basta uma conferencia pra ver se o valor é inteiro
                  &#125;
                  catch &#40;Exception e&#41; &#123; //caso não for numerico, ocorrera um erro e esse catch trata o valor não numerico
                      validar = false;
                  &#125;
                  finally&#123;
                      return validar; // retornando o status booleano 
                  &#125;
              &#125;
          &#125;          
      &#125;
      return validar;     //se não entrou em nenhum catch temos que exibir a saída dos ifs true ou false
  &#125;

Ai vc faz executa o metodo se retornar false não é valido!

if &#40;!validaMoeda&#40;sValor&#41;&#41;&#123; 
                     
            errors.add&#40;&quot;conteudoPesquisa&quot;,new ActionError&#40;&quot;error.valor.numeric&quot;&#41;&#41;;
                
   &#125;
Criado 15 de setembro de 2006
Ultima resposta 16 de set. de 2006
Respostas 1
Participantes 2