No cadastro de produtos, para que as informações não sumam caso o usuário retorne ao formulário, foi usada uma taglib específica do Spring para formulários.
<form:input path="name" class="form-control" />
Isso exigiu que fosse passado como argumento no método controller, um objeto de Produto, que é gerenciado pelo Spring.
public ModelAndView formulario(Produto produto) {
//código
}
E no método que faz o post, caso o produto possua erros de validação, o usuário é enviado de volta para o formulário.
@RequestMapping(method = RequestMethod.POST)
public ModelAndView cadastrar(@Valid Produto produto, BindingResult bindingResult,
RedirectAttributes redirect) {
if(bindingResult.hasErrors()){
//Envia o usuário para o formulário
return formulario(produto);
}
produtoDao.persist(produto);
redirect.addFlashAttribute("sucess", "O produto foi cadastrado com sucesso!");
return new ModelAndView("redirect:produto");
}
Só que desta maneira, o usuário não é redirecionado após o post, o que causa o problema do F5 e deixa a url do action do formulário na barra do navegador, o que pode confundir o usuário. Estou tentando redirecionar o usuário após o post, mas apenas usando "redirect:/produto/cadastro", os erros de validação e o produto não são passados na nova requisição.
if(bindingResult.hasErrors()){
//Preciso redirecionar o usuário de alguma maneira após o post
//entretanto, é necessário que os erros de validação e os dados
//preenchidos pelo usuário apareçam na página do formulário.
return ???;
}
É possível fazer esta alteração?