Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

org.thymeleaf.exceptions.TemplateInputException: Error resolving template

Olá, Estou com um problema que não consigo arrumar. Estou fazendo um projeto paralelo e idêntico ao do curso, apenas para praticar. Quando os campos obrigatórios são preenchidos ok, mas quando é feita a validação é lançado um erro. Obs: Quando o método retorna "return "redirect:/gestao/formulario" não da erro, porém perco as mensagens de erro na tela pelo fato de ser feita uma nova requisição. Quando o método retorna "gestao/formulario" ou "/gestao/formulario" é lançado uma exception. Segue o código:

package br.com.futebol.controller;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import br.com.futebol.model.Jogador;
import br.com.futebol.model.StatusPagamento;
import br.com.futebol.repository.JogadorRepository;

@Controller
@RequestMapping("gestao")
public class JogadorController {

    @Autowired
    private JogadorRepository jogadorRepository;

    @GetMapping
    public String home(Model model)
    {
        Iterable<Jogador> jogadores = jogadorRepository.findAll();
        model.addAttribute("jogadores", jogadores);
        return "home";
    }

    @GetMapping("formulario")
    public String formulario(Jogador jogador)
    {
        return"cadastrarjogador";
    }

    @RequestMapping( value = "novo" , method = RequestMethod.POST)
    public  String novo(@Valid Jogador jogador, BindingResult result,  RedirectAttributes attributes)
    {

        if(result.hasErrors())
        {
            return "/gestao/formulario";
        }

        jogador.setStatusPagamento(StatusPagamento.NAO);
        jogadorRepository.save(jogador);
        attributes.addFlashAttribute("sucesso", "O jogador " + jogador.getApelido() + " foi cadastrado com sucesso!!");
        return "redirect:/gestao";
    }

}
<!DOCTYPE html>
<html>
<head>


<meta charset="UTF-8">
<link rel="stylesheet"
    href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
    integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
    crossorigin="anonymous">
<title>Cadastro de jogadores</title>
</head>
<body>

<div class="container">
<div class="jumbotron mt-3 mb-3">
            <h1 class="display-4">Novo Jogador</h1>
            <p class="lead">Cadastro de novo jogador.</p>

        </div>


    <div class="card">
    <form th:object="${jogador}" method="post" action="/gestao/novo" class="card-body">

        <div class="form-group">
        <input class="form-control form-control-lg mb-2" type="text" 
            placeholder="Nome"  th:field="*{nome}" th:errorclass="is-invalid"/>
            <div class="invalid-feedback"  th:errors="*{nome}">    </div>
            </div>

            <div class="form-group">
             <input
            class="form-control form-control-lg mb-2" type="text" 
            placeholder="Apelido" th:field="*{apelido}" th:errorclass="is-invalid"/> 
            <div class="invalid-feedback"  th:errors="*{apelido}">    </div>
            </div>

            <div class="form-group">
            <input
            class="form-control form-control-lg mb-2" type="date"
             style="width: 220px" th:field="*{dataNascimento}"  /> 
            </div>

            <div class="form-group">
            <input
            class="form-control form-control-lg mb-2" type="text" 
            placeholder="Telefone" th:field="*{telefone}" style="width: 150px"  th:errorclass="is-invalid"/> 
            <div class="invalid-feedback"  th:errors="*{telefone}">    </div>
            </div>


            <div class="form-group">
            <input
            class="form-control form-control-lg mb-2" type="text" 
            placeholder="Endereço" th:field="*{endereco}" style="width: 220px"  />
            </div>
            <button type="submit" class="btn btn-info">Cadastrar</button>


    </form>
        </div>    
</div>
</body>
</html>

` org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/gestao/formulario], template might not exist or might not be accessible by any of the configured Template Resolvers

1 resposta
solução!

Olá Wellington, tudo bem com você?

Não sei se entendi direito, mas o problema está no momento em que deixamos um campo vazio e você não consegue retornar à própria página sem precisar fazer uma nova requisição (redirect:/gestao/formulario)?

De acordo com o erro, o formulario não está sendo encontrado dentro da pasta gestao em templates. Verifica se o arquivo formulario está no lugar correto, assim como o próprio formulario do projeto da aula que está localizado em templates/pedidos.

Confere se é isso e depois me avisa se funcionou!

Abraços e bons estudos!!

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