1
resposta

Aula 6 - Validação dos campos preço

Gostaria de esclarecer uma coisa. Na hora de cadastrar um novo livro - após ter criado as validações; o sistema cadastra perfeitamente se caso os preços forem de valores inteiros, porém quando tento colocar um valor decimal ele dá problema no resultado da validação. Ex.: 69,99 no caso de um valor do combo. Por que isso acontece? Qual seria a solução mais prática para isso?

1 resposta

Oi Fabio, tudo bem?

Isso tem haver com o padrão de localização do sistema e no caso do SpringMVC. Como a localização padrão é EN, ou seja, Estados Unidos, então o separador de casa decimal é o ponto "." e não a vírgula, como é nosso caso aqui no PT_BR.

Existem algumas formas de resolver isso, a forma padrão para todo o sistema de uma vez, seria criar um Binder dentro de um ControllerAdvice que serve como controller de configuração utilizado pelo Spring. Ficando assim:

@ControllerAdvice
public class GlobalBindingInitializer {

  @InitBinder
  public void initBigDecimalBinder(WebDataBinder binder) throws Exception {
    DecimalFormat df = new DecimalFormat();
    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setGroupingSeparator(',');
    df.setDecimalFormatSymbols(dfs);
    binder.registerCustomEditor(BigDecimal.class, new CustomNumberEditor(BigDecimal.class, df, true));
  }
}

Veja se isso te ajuda em algo.