Pessoal, estou enfrentando alguns problemas para implementar um método de edição. Ao clicar em editar sou redirecionado para a página, mas não consigo preencher ela com os valores do BD e ao preencher os campos manualmente e clicar em editar é feita uma inserção e não edição. A classe controller, nos métodos referentes a edição, ficou assim:
@GetMapping("/update/{id}")
public ModelAndView preUpdate(@PathVariable("id") Long id, ModelMap model ) {
Chamado chamado = chamadoDao.getId(id);
System.out.println("teste:" + chamado);
model.addAttribute("chamados", chamado);
System.out.println(model);
return new ModelAndView("/chamados/editar", model);
}
@PostMapping("/update")
public ModelAndView update(@Valid @ModelAttribute("chamado") Chamado chamado, BindingResult result, RedirectAttributes attr) {
if(result.hasErrors()) {
return form(chamado);
}
chamadoDao.editar(chamado);
attr.addFlashAttribute("sucesso", "Chamado alterado com sucesso.");
return new ModelAndView("redirect:chamados/lista-chamados");
}
A classe ChamadoDao
@Transactional(readOnly=true)
public Chamado getId(Long id) {
String jpql = "from Chamado c where c.id = :id";
TypedQuery<Chamado> query = manager.createQuery(jpql, Chamado.class);
query.setParameter("id", id);
return query.getSingleResult();
}
@Transactional(readOnly=false)
public void editar(Chamado chamado) {
manager.merge(chamado);
}
Página editar.jsp
<!DOCTYPE html>
<html>
<head>
<title>Editar Chamados</title>
</head>
<body>
<div class="container">
<div class="form-container">
<header class="header">
<h1 class="title">Editar Chamado</h1>
</header>
<s:url value="${chamados.id == null ? '/chamados/gravar' : '/chamados/update'}" var="update"/>
<form action="${s:mvcUrl('CC#update').build() }" method="post" class="form" modelAttribute="chamado">
<div class="row">
<div class="form-group col">
<label for="atividade">Atividade</label> <input type="text"
class="form-control" id="atividade" name="atividade"
required>
</div>
<div class="form-group col">
<label for="frenteDeTrabalho">Frente de Trabalho</label> <input type="text"
class="form-control" id="frenteDeTrabalho"
name="frenteDeTrabalho" required>
</div>
</div>
<div class="row">
<div class="form-group col">
<label for="nivel">Nível</label> <input type="text" class="form-control"
id="nivel" name="nivel" required>
</div>
<div class="form-group col">
<label for="prazo">Prazo</label>
<input type="text" class="form-control" name="prazo" id="datepicker" />
<script>
$('#datepicker').datepicker({