Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

URI diferente na validação

Quando clicamos no botão para cadastrar um novo livro, caso não passe pela validação, está considerando a URI http://localhost:8080/casadocodigo/produtos ao invés da http://localhost:8080/casadocodigo/produtos/form, mesmo que esteja no controlador para carregar o form:

    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView gravar(@Valid Produto produto, BindingResult result, RedirectAttributes redirectAttributes) {
        if (result.hasErrors()) {
            return form();
        }

        produtoDao.gravar(produto);
        redirectAttributes.addFlashAttribute("sucesso", "Produto cadastrado com sucesso!");
        return new ModelAndView("redirect:produtos");
    }

Isso é um problema?

5 respostas

Olá Mateus!

Na verdade o processo está ao contrario.

Quando há erros ele entra dentro do if e retorna o form:

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

Já quando não há erros ele redireciona para /produtos:

return new ModelAndView("redirect:produtos");

Espero que tenha ajudado!

Bons estudos.

E ai Guilherme, blz?

A questão é justamente quando ocorre o erro (entra no if), a página JSP carregada é a do form de cadastro, porém a URI é a de produtos (http://localhost:8080/casadocodigo/produtos). O action do forms está definido como /casadocodigo/produtos, queria saber se isso faz sentido, se realmente deveria ser dessa maneira ou se o correto seria redirecionar para http://localhost:8080/casadocodigo/produtos/form. Na aula também ocorre dessa forma e não foi mencionado nada a respeito.

At.,

Olá Mateus!

Eu já terminei esse curso e fui revisar os códigos, meu método form está assim:

@RequestMapping("/form")
    public ModelAndView form(Produto produto) {
        ModelAndView modelAndView = new ModelAndView("produtos/form");
        modelAndView.addObject("tipos", TipoPreco.values());
        return modelAndView;
    }

E o gravar possui o if dessa forma:

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

Pelo que entendi da sua dúvida essa implementação resolve, certo?

Provavelmente o professor irá mudar o código no decorrer do curso.

E ai Guilherme,

Baixei o projeto completo no final do curso, executei ele e está acontecendo a mesma coisa. A minha duvida é somente com relação a URI, se eu fizer a validação de um formulário e alguns campos não estiverem válidos, o correto é eu permanecer na URI do formulário ou na URI do action do formulário, mesmo não tendo completado o processo com sucesso?

Qualquer coisa pode esquecer esse projeto em específico e pensar em uma validação de formulário no geral, levando em conta somente a URI do formulário e do action do formulário.

At.,

solução!

Olá Matheus!

Acho que entendi.

É interessante você passar pela Action do formulário pois através dela você pode passar o mesmo fomulário que estava sendo preenchido.

Quando você faz isso, se o usuário errar algo ele não precisa reescrever o preenchimento que ele havia feito. Ele só preenche as partes faltantes (ou erradas).

Se você chama a URI pode ser que o formulário seja "reiniciado" e todos os dados sejam perdidos.

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