O método da aula não estava funcionando, então criei o método acima que funcionou como na aula, abria a tela de formulário, mas duplicava a entrada.
Na aula seguinte fui tentar manter meu método mas com as modificações em aula (ou algo do tipo) e parou de funcionar. Copiei o método da aula e continuou não funcionando.
FilmeController.java
package br.com.alura.screenmatch.controller;
@Controller
@RequestMapping("/filmes")
public class FilmeController {
@Autowired
private FilmeRepository repository;
@GetMapping("/formulario")
public String carregaPaginaFormulario() {
return "filmes/formulario";
}
@GetMapping
public String carregaPaginaListagem(Model model) {
model.addAttribute("lista", repository.findAll());
return "filmes/listagem";
}
@PutMapping
@Transactional
public String carregaPaginaEdicao(DadosAlteracaoFilme dados) {
var filme = repository.getReferenceById(dados.id());
filme.atualizaDados(dados);
return "redirect:/filmes";
}
@PostMapping
@Transactional
public String cadastraFilme(DadosCadastroFilme dados) {
var filme = new Filme(dados);
repository.save(filme);
return "redirect:/filmes";
}
@DeleteMapping
@Transactional
public String removeFilme(Long id) {
repository.deleteById(id);
return "redirect:/filmes";
}
}
listagem.html
<!DOCTYPE html>
<html lang="en"
xmlns:th="http://thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{template.html}"
>
<head>
<title>Lista de filmes</title>
</head>
<body>
<div layout:fragment="conteudo">
<h1>Lista de Filmes</h1>
<a href="/filmes/formulario">Novo</a>
<table>
<thead>
<tr>
<th>NOME</th>
<th>DURAÇÃO</th>
<th>ANO LANÇAMENTO</th>
<th>GÊNERO</th>
<th>AÇÕES</th>
</tr>
</thead>
<tbody>
<tr th:each="filme : ${lista}">
<td th:text="${filme.nome}"></td>
<td th:text="${filme.duracaoEmMinutos}"></td>
<td th:text="${filme.anoLancamento}"></td>
<td th:text="${filme.genero}"></td>
<td>
<a th:href="@{/filmes/formulario?id={id}(id=${filme.id})}">Editar</a>
<form action="/filmes" method="post">
<input type="hidden" name="_method" value="delete"/>
<input type="hidden" name="id" th:value="${filme.id}"/>
<input type="submit" value="Excluir"/>
</form>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Erro:
Exception processing template "filmes/formulario": An error happened during template parsing (template: "class path resource [templates/filmes/formulario.html]")
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/filmes/formulario.html]")
<REMOVIDO VARIOS at org.spring>
Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "filme.nome" (template: "filmes/formulario" - line 19, col 42)
<REMOVIDO VARIOS at org.spring>
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "filme.nome" (template: "filmes/formulario" - line 19, col 42)
<REMOVIDO VARIOS at org.spring>
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'nome' cannot be found on null
<REMOVIDO VARIOS at org.spring>
2023-07-21T19:26:33.846-03:00 ERROR 27692 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/filmes/formulario.html]")] with root cause
org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'nome' cannot be found on null