0
respostas

Redirecionando após o post

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?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software