Fiz minha classe ProdutoValidation igual ao da video aula, mas só está validando o numero de paginas, os campos titulo e descricao se eu deixar nulo passa normal.
package org.casadocodigo.loja.validation;
import org.casadocodigo.loja.models.Produto;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
public class ProdutoValidation implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return Produto.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
//Esses dois validation não estão funcionando
ValidationUtils.rejectIfEmpty(errors, "titulo", "field.required");
ValidationUtils.rejectIfEmpty(errors, "descricao", "field.required");
Produto p = (Produto)target;
//Aqui OK se eu não enviar o numero de paginas
if(p.getPaginas()<=0){
errors.rejectValue("paginas", "field.required");
}
}
}
@Entity
public class Produto {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String titulo;
private String descricao;
private int paginas;
@ElementCollection
private List<Preco>precos;
//getters e setter omitidos
}
package org.casadocodigo.controllers;
import javax.validation.Valid;
import org.casadocodigo.loja.daos.ProdutoDAO;
import org.casadocodigo.loja.models.Produto;
import org.casadocodigo.loja.models.TipoPreco;
import org.casadocodigo.loja.validation.ProdutoValidation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Controller
@RequestMapping(value="/produtos")
public class ProdutosController {
@Autowired
private ProdutoDAO produtoDao;
public void initBinder(WebDataBinder webDataBinder){
webDataBinder.addValidators(new ProdutoValidation());
}
@RequestMapping(method=RequestMethod.POST)
public ModelAndView grava(@Valid Produto produto, BindingResult result, RedirectAttributes redirectAttributes){
if(result.hasErrors()){
return new ModelAndView("redirect:produtos/form");
}
produtoDao.gravar(produto);
redirectAttributes.addFlashAttribute("sucesso", "Produto cadastrado com sucesso");
return new ModelAndView("redirect:produtos");
}
//Outros metodos omitidos