2
respostas

Validação dos Campos Impresso, E-book e Combo

Boa noite.

Estou tentando validar os campos Impresso, E-book e Combo. Já faz um certo tempo que estou tentando e até agora nada...Na verdade esta validando mas as mensagens não estão aparecendo na tela para o usuário.

O código que desenvolvi foi este:

        int i = 0;
        for (Price price: product.getPrices()) {
            if (price.getValue() == null) {
                errors.rejectValue("prices[" +  i  + "].value", "field.required");
            } else if (price.getValue().doubleValue() <= 0) {
                errors.rejectValue("prices[" +  i  + "].value", "field.value.invalid");
            } 
            i++;
        }

Este é o meu formulário (apenas a parte onde os preços devem ser inseridos)

<c:forEach items="${priceTypes}" var="priceType" varStatus="status">
            <div>
                <form:label path="prices" for="${priceType}">${priceType}</form:label>
                <form:input path="prices[${status.index}].value" id="${priceType}" />
                <form:hidden path="prices[${status.index}].type" value="${priceType}" />
                <form:errors path="prices" />
            </div>
        </c:forEach>

Aparentemente eu não estou conseguindo pegar os campos individualmente, pois se eu deixar o código como abaixo funciona, só que todos os inputs iterados com o <c:foreach> no meu formulário ficam com a mensagem de validação (é exibida 3 x a mensagem de campo obrigatório, mesmo que um dos campos esteja preenchido corretamente).

errors.rejectValue("prices", "field.required")

Ah, e tem alguma forma mais organizada de implementar essa validação, sem ter que ficar colocando vários Ifs no código?

2 respostas

Boa tarde Carlos!

Estava analisando seu código e a principio não encontrei um erro. Peço que me mande o código completo a partir da tag form por favor para que eu possa dar uma olhada.

Obrigado pela força, Guilherme!

Segue o código completo à partir da tag form

<form:form action="${s:mvcUrl('PC#save').build()}" modelAttribute="product" method="POST"
        enctype="multipart/form-data">
        <div>
            <form:label for="tittle" path="tittle">Título</</form:label>
            <form:input path="tittle" id="tittle" />
            <form:errors path="tittle" />
        </div>

        <div>
            <form:label for="description" path="description">Descricao</form:label>
            <form:textarea path="description" cols="20" rows="10" />
            <form:errors path="description" />
        </div>

        <div>
            <form:label path="pages" for="pages">Paginas</form:label>
            <form:input path="pages" />
            <form:errors path="pages" />
        </div>

        <div>
            <form:label path="releaseDate" for="releaseDate">Data Lançamento</form:label>
            <form:input path="releaseDate" />
            <form:errors path="releaseDate" />
        </div>

        <c:forEach items="${priceTypes}" var="priceType" varStatus="status">
            <div>
                <form:label path="prices" for="${priceType}">${priceType}</form:label>
            <form:input path="prices[${status.index}].value" id="${priceType}" />
                <form:hidden path="prices[${status.index}].type" value="${priceType}" />
                <form:errors path="prices" />
            </div>
        </c:forEach>

        <div>
            <form:label path="summary" for="summary">Sumário</form:label>
            <form:input  type="file" name="summaryPath" path=""/>
            <form:errors path="summary" />
        </div>
        <button type="submit">Cadastrar</button>
    </form:form>