4
respostas

Como validar o Preço e Sumário do Produto

Boa tarde,

Como eu válido o preenchimento do preço e do sumário do livro?Alterei conforme código 1 a classe ProdutoValidation para validar os preços e o sumarioPath mas não funciona. Como eu poderia fazer caso quisesse validar esses dois campos? Código 1:

    package br.com.casadocodigo.loja.validation;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

import br.com.casadocodigo.loja.models.Produto;

public class ProdutoValidation implements Validator{

    @Override
    public boolean supports(Class<?> clazz) {
         return Produto.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        ValidationUtils.rejectIfEmpty(errors, "titulo", "field.required");
        ValidationUtils.rejectIfEmpty(errors, "descricao", "field.required");
        ValidationUtils.rejectIfEmpty(errors, "paginas", "field.required");
        ValidationUtils.rejectIfEmpty(errors, "dataLancamento", "field.required");
        ValidationUtils.rejectIfEmpty(errors, "precos", "field.required");
        ValidationUtils.rejectIfEmpty(errors, "sumarioPath", "field.required");

        Produto produto = (Produto) target;
        if(produto.getPaginas() <= 0) {
            errors.rejectValue("paginas", "field.required");
        }
    };
}

Código 2: ( message.properties )

field.required = Campo é obrigatório.
field.required.produto.titulo = O Campo título é obrigatório.
field.required.produto.descricao = O Campo Descrição é obrigatório.
field.required.produto.paginas = O Campo Páginas é obrigatório.
field.required.produto.dataLancamento = O Campo Data de Lançamento é obrigatório.
field.required.produto.precos = Teste preco.
field.required.produto.sumarioPath = Teste sumário.
typeMismatch = O tipo do dado foi inválido.

Att.

4 respostas

Os preços consegui validar mas o sumarioPath ainda não, pelo que analisei se entendi certo o funcionamento do @Valid ele é chamado quando o controller recebe os paramentos, logo neste momento ainda não cetamos o sumarioPath logo teria que usar outra técnica para validação.

Dá para chamar o validator manualmente:

@Autowired
SmartValidator validator;

public String saveAccount(@ModelAttribute Account account, BindingResult result) {
    // ... custom logic
    validator.validate(account, result, Account.Step1.class);
    if (result.hasErrors()) {
        // ... on binding or validation errors
    } else {
        // ... on no errors
    }
    return "";
}

Olá João!

Poderia me mandar o código do seu Controller por favor?

Olá João!

Conseguiu fazer a validação?