Boa noite pessoas!!!
Estava realizando os exercícios, cheguei até o final dessa aula e surgiu uma duvida. Talvez não esteja configurado de maneira correta o meu validation, mas se eu deixar os campos vazios tanto quanto descrição e titulo e preencher o campo pagina ele passa pela validação com ok e salva no banco.
O certo seria, se o titulo ou descrição ou pagina estiver em branco ser redirecionado ao meu form... não?
Segue meu controller
package br.com.casadocodigo.loja.controllers;
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.InitBinder;
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;
import br.com.casadocodigo.loja.daos.ProdutoDAO;
import br.com.casadocodigo.loja.models.Produto;
import br.com.casadocodigo.loja.models.TipoPreco;
import br.com.casadocodigo.loja.validation.ProdutoValidation;
@Controller
@RequestMapping("/produtos")
public class ProdutosController {
@Autowired
private ProdutoDAO produtoDao;
@InitBinder
public void InitBinder(WebDataBinder binder){
binder.addValidators(new ProdutoValidation());
}
@RequestMapping("form")
public ModelAndView form(){
ModelAndView modelAndView = new ModelAndView("produtos/form");
modelAndView.addObject("tipos", TipoPreco.values());
return modelAndView;
}
@RequestMapping(method = RequestMethod.POST)
public ModelAndView gravar(Produto produto, BindingResult result, RedirectAttributes redirect){
if (result.hasErrors()) {
//return form();
return form();
}
produtoDao.gravar(produto);
redirect.addFlashAttribute("sucesso","produto cadastrado com sucesso");
return new ModelAndView("redirect:produtos");
}
@RequestMapping(method = RequestMethod.GET )
public ModelAndView listar(){
ModelAndView modelAndView = new ModelAndView("produtos/listar");
modelAndView.addObject("produtos", produtoDao.listar());
return modelAndView;
}
}
A minha classe de validation
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) {
// TODO Auto-generated method stub
return Produto.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors erros) {
// TODO Auto-generated method stub
ValidationUtils.rejectIfEmpty(erros, "titulo", "field.requerid");
ValidationUtils.rejectIfEmpty(erros, "descricao", "field.requerid");
ValidationUtils.rejectIfEmpty(erros, "paginas", "field.requerid");
Produto produto = (Produto) target;
if (produto.getPaginas() <= 0) {
erros.rejectValue("paginas", "field.requerid");
}
}
}