Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Verificar e validar os precos dos produtos

Estou com dúvida na validação dos preços. Minha validação atual funciona, porém o tipo BigDecimal do valor dos precos não permite a validação da mesma forma que o int da páginas. Gostaria de saber qual a melhor forma de trabalhar com o BigDecimal caso queira validar o valor do campo.

Meu código ficou da seguinte forma:

form.jsp

 <c:forEach items="${tipos}" var="tipoPreco" varStatus="status">
        <div>
            <label>${tipoPreco}</label>
            <input type="text" name="precos[${status.index}].valor">
            <form:errors path="precos[${status.index}].valor" />
            <input type="hidden" name="precos[${status.index}].tipo" value="${tipoPreco}">
        </div>
    </c:forEach>

ProdutoValidation

@Override
    public void validate(Object target, Errors errors) {
        //verifica se campo nao esta vazio
        ValidationUtils.rejectIfEmpty(errors, "titulo", "field.required");
        ValidationUtils.rejectIfEmpty(errors, "descricao", "field.required");
        //realiza um cast para converter um target em produto
        Produto produto = (Produto) target;
        if(produto.getPaginas()<=0)
            //rejeita os valores conforme if
            errors.rejectValue("paginas", "field.required");
        for(int i=0; i<=produto.getPrecos().size(); i++){
            ValidationUtils.rejectIfEmpty(errors,"precos["+i+"].valor", "field.required");
        }        
    }

messages.properties

field.required = Campo é obrigatório
field.required.produto.titulo = O Campo título é obrigatório
field.required.produto.paginas = Informe o número de páginas
field.required.produto.descricao = O Campo descrição é obrigatório
field.required.produto.precos[0].valor = O campo valor é obrigatório
field.required.produto.precos[1].valor = O campo valor é obrigatório
field.required.produto.precos[2].valor = O campo valor é obrigatório 
typeMismatch = o tipo do dado é inválido
4 respostas
solução!

Fiquei em dúvida sobre qual é exatamente a sua dúvida :). Pegando ali o código de validação, você pode acessar o bigdecimal e usar os métodos dele para comparar com o valor que vc considera válido. Ex:

if(valor.compareTo(BigDecimal.ZERO) <= 0){
  //erro de validação
}

Oi Alberto, minha dúvida é exatamente isso mesmo. Estava com dificuldade em trabalhar com o tipo BigDecimal, mas ainda estou apanhando com as validações. Para os preços só consegui validar com o rejectIfEmpty, e ao tentar validar com o rejectValue recebo uma NullPointerException.

Se o valor está vindo nulo, deve ter algo errado no formulário. Dá uma debugada para ver o que tá chegando e tudo mais.

Vou fazer isso, e estudar um pouco mais a linguagem. Valeu!!!