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