Alex tudo bem ? Estou tentando criar uma tela onde eu possa inserir vários detalhes e persistir tudo de uma única vez. Por exemplo, inserir tenho uma pessoa e gostaria de inserir 5 telefones e quando for gravar os dados da pessoa gravar todos os 5 telefones. segue um exemplo disso
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>Master Detail com Spring</title>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet"></link>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid">
<h2>Mestre / Detalhe - Cadastro</h2>
<hr>
<form class="form-horizontal" th:object="${capa}" th:action="salvar"
method="post">
<div th:if="${#fields.hasAnyErrors()}" class="alert alert-danger"
role="alert">
<p th:each="err : ${#fields.allErrors()}" th:text="${err}">erros</p>
</div>
<div class="row">
<div class="form-group">
<label for="txtObservacao" class="col-sm-2 control-label">Observações</label>
<div class="col-sm-10">
<input type="text" class="form-control" th:field="*{nome}"
id="txtObservacao" placeholder="Observações">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-sm-10">
<select class="form-control" id="txtItems">
<option th:each="it : ${items}" th:text="${it.nome}"
th:value="${it}"></option>
</select>
</div>
<div class="col-sm-2">
<button class="btn btn-info">Adiciona</button>
</div>
</div>
</div>
<div class="row">
<div class="container-fluid">
<table class="table table-bordered table-striped">
<caption>Items da Capa</caption>
<thead>
<tr>
<th>Id</th>
<th>Item</th>
<th>Ações</th>
</tr>
</thead>
<tbody>
<tr th:each="det : ${detalhes}">
<th th:text="${det.item.id}">Id</th>
<th th:text="${det.item.nome}">Item</th>
<th>Ações</th>
</tr>
</tbody>
</table>
</div>
</div>
<button class="btn btn-success" type="submit">Salvar</button>
</form>
</div>
</body>
</html>
Controller
package br.com.tcc.cee.controller;
@Controller
public class HomeController {
@Autowired
private ItemDao itemDao;
@Autowired
private CapaDao capaDao;
@Autowired
private DetalheDao detalheDao;
@GetMapping
public ModelAndView home() {
ModelAndView mv = new ModelAndView("home");
mv.addObject("capas", capaDao.findAll());
return mv;
}
@PostMapping
public ModelAndView salvar(@Valid @ModelAttribute("capa") Capa capa, BindingResult result, RedirectAttributes atts) {
if (result.hasErrors()) {
ModelAndView mv = new ModelAndView("form");
return mv;
}
capaDao.save(capa);
ModelAndView mv = new ModelAndView("redirect:/");
atts.addFlashAttribute("mensagem", "Registro salvo com sucesso...");
return mv;
}
@ModelAttribute("items")
public List<Item> getItems(){
return itemDao.findAll();
}
@GetMapping("form")
public ModelAndView form() {
ModelAndView mv = new ModelAndView("form");
mv.addObject("capa", new Capa());
mv.addObject("detalhe", new Detalhe());
return mv;
}
@PostMapping("adicionaDetalhe")
public ModelAndView adicionaDetalhe(@ModelAttribute("capa") Capa capa, @ModelAttribute("detalhe") Detalhe detalhe) {
ModelAndView mv = new ModelAndView("redirect:form");
capa.getDetalhes().add(detalhe);
return mv;
}
}