2
respostas

return new ModelAndView("produtos/form");

Amigos se eu retornar no if um :

new ModelAndView("produtos/form");

o formulário não recebe os dados do Foreach (Preços) porque?

Do jeito da Aula em vídeo da certo segue o codigo que está funcionando.

@RequestMapping(method = RequestMethod.POST)
    public ModelAndView gravar(@Valid Produto produto, BindingResult result, 
            RedirectAttributes redirectAttributes) {

        if (result.hasErrors()) {
            return form();
        }

        dao.gravar(produto);

        redirectAttributes.addFlashAttribute("sucesso", "Produto cadastrado com sucesso!");

        return new ModelAndView("redirect:produtos");
    }
2 respostas

Sergio, desta forma você não está indicando ao Spring que ele deve passar pelo método form, ou seja, ele vai retornar um novo objeto do tipo ModelAndView que vai apenas buscar o arquivo"produtos/form".

Se você deseja que ele recupere as informações do TipoPreco, você deve redirecioná-lo para a rota produtos, onde o código abaixo será executado e os dados do forEach preenchidos:

ModelAndView modelAndView = new ModelAndView("produtos/form");
        modelAndView.addObject("tipos", TipoPreco.values());

        return modelAndView;

Pelo que entendi na aula "5. Redirect com Escopo de Flash" (https://cursos.alura.com.br/course/spring-mvc-1-criando-aplicacoes-web/section/5/task/2), após chamar um método por post, devemos sempre dar um redirect. Então por que os dados do formulário não são reenviados depois de dar um f5 na página de form?