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.
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:
[code]public boolean validaMoeda(String valor) { //valida até 999.999,99
boolean validar = true;
int len = valor.length(); // retorna qtde caracters
int ponto = valor.indexOf(’.’); // retorna 1 se existir ponto e -1 se não existir
if (ponto != -1){ //se existir ponto
System.out.println("não use . ");
validar = false; //termina o metodo
}
else{ // se não existir ponto verificaremos a virgula
int virgula = valor.indexOf(','); // retorna 1 se existir -1 se não existir
if (virgula != -1){ //se existir...
System.out.println("virgula digitada");
if (len>9){ //verificamos qtde de caracters digitados
System.out.println("valor invalido > 999999,99");
validar = false; // e se for maior q 9 (pq inclui a virula) termina o metodo
}
else{ //se não se qtde caracters for valida
try {
int posVirg = (len - 3); //retorna posição da virgula
char virg = valor.charAt(posVirg); // retorna o caracter posicionado na virgula
if (virg != ',') { // se esse caracter não for uma virgula
System.out.println("virgula não esta posicionada na casa decimal correta");
validar = false; //termina o metodo
}
else{ //senão se esse caracter for de fato uma virgula
String antes = valor.substring(0,valor.indexOf(',')); //recebe conteudo antes virgula
String depois = valor.substring(valor.indexOf(",")+1); //recebe conteudo após virgula
Integer.parseInt(antes); // valida pra ver se é um numero
Integer.parseInt(depois);
}
}
catch (Exception e) { //caso não for numerico, ocorrera um erro e esse catch trata o valor não numerico
validar = false;
}
finally{
return validar; // retornando o status false do boolean
}
}
}
else{ // sem virgulas
if (len>6){ // sem virgulas só é possivel uma entrada menor do valor
System.out.println("valor invalido > 999999");
validar = false;
}
else{
try {
Integer.parseInt(valor); //sem virgula basta uma conferencia pra ver se o valor é inteiro
}
catch (Exception e) { //caso não for numerico, ocorrera um erro e esse catch trata o valor não numerico
validar = false;
}
finally{
return validar; // retornando o status booleano
}
}
}
}
return validar; //se não entrou em nenhum catch temos que exibir a saída dos ifs true ou false
} [/code]
Ai vc faz executa o metodo se retornar false não é valido!
[code] if (!validaMoeda(sValor)){
errors.add("conteudoPesquisa",new ActionError("error.valor.numeric"));
}[/code]