您好,我需要帮助。我有一对一的Spring Boot应用程序。我需要帮助从模型jsp表单发送列表并保存到db。 所以我需要从jsp表单同时保存到db两个模型表(一对多)(使用模型属性):
Model 1: @Entity @Table(name = "header") public class Header { private int id; private String dokument; private Set Stavke> stavke; } Model 2: @Entity public class Stavke { private int id; private String Artikal; private double kol; private Header header; }
<pre>
控制器:
@RequestMapping(value = "add")
public String addStudent(Model model){
model.addAttribute("header", new Header());
model.addAttribute("stavke", new Stavke());
return "add";
}
RequestMapping(value = "save2", method = RequestMethod.POST)
public String sav2(@ModelAttribute("forma")Header header, BindingResult result, SessionStatus status
,@RequestParam("stavke") Set String> stavke, double kol){
Set stavke1 = new HashSet Stavke>(){{
for(String stavkes : stavke ){
add(new Stavke(stavkes, header, kol));
}
}};
header.setStavke(stavke1);
headerRepository.save(new HashSet<Header>() {{
add(header);
}});
return "redirect:form";
}
JSP form:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<SCRIPT language="javascript">
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var cell1 = row.insertCell(0);
var element1 = document.createElement("input");
element1.type = "checkbox";
element1.name = "chkbox[]";
cell1.appendChild(element1);
var cell2 = row.insertCell(1);
cell2.innerHTML = rowCount + 1;
var cell3 = row.insertCell(2);
var element2 = document.createElement("input");
element2.type = "text";
var length = (table.rows.length) - 1;
element2.name = "Artikal";
cell3.appendChild(element2);
/* var cell3 = row.insertCell(2);
var element2 = document.createElement("input");
element2.type = "text";
var length=(table.rows.length)-1;
element2.name = "kol";
cell3.appendChild(element2); */
var cell4 = row.insertCell(3);
var element3 = document.createElement("input");
element3.type = "text";
var length = (table.rows.length) - 1;
element3.name = "kol";
cell4.appendChild(element3);
}
function deleteRow(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for (var i = 0; i < rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if (null != chkbox && true == chkbox.checked) {
table.deleteRow(i);
rowCount--;
i--;
}
}
} catch (e) {
alert(e);
}
}
</SCRIPT>
<body>
<div class="col-md-4">
<form action="/save4" method="post">
<input type="text" name="dokument" class="form-control"
placeholder="Firstname" />
<div style="clear: both; display: block; height: 10px;"></div>
<input type="date" name="datum" class="form-control"
placeholder="15.01.2017" />
<div style="clear: both; display: block; height: 10px;"></div>
<TABLE id="dataTable" width="350px" border="1"
class="table table-bordered">
<tr>
<th width="10"></th>
<th width="10">Rb.</th>
<th>${last.id+1}</th>
</tr>
<TR>
<TD><INPUT type="checkbox" name="chk" /></TD>
<TD>1</TD>
<TD><input type='text' name="Artikal" /></TD>
<TD><input type='text' name="kol" /></TD>
</TR>
</TABLE>
</li> <INPUT type="button" value="Add Row" onclick="addRow('dataTable')"
class="btn" /> <INPUT type="button" value="Delete Row"
onclick="deleteRow('dataTable')" class="btn" /> <input
type="submit" class="btn btn-success" value="Save"></input>
</form>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<SCRIPT language="javascript">
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var cell1 = row.insertCell(0);
var element1 = document.createElement("input");
element1.type = "checkbox";
element1.name = "chkbox[]";
cell1.appendChild(element1);
var cell2 = row.insertCell(1);
cell2.innerHTML = rowCount + 1;
var cell3 = row.insertCell(2);
var element2 = document.createElement("input");
element2.type = "text";
var length = (table.rows.length) - 1;
element2.name = "Artikal";
cell3.appendChild(element2);
/* var cell3 = row.insertCell(2);
var element2 = document.createElement("input");
element2.type = "text";
var length=(table.rows.length)-1;
element2.name = "kol";
cell3.appendChild(element2); */
var cell4 = row.insertCell(3);
var element3 = document.createElement("input");
element3.type = "text";
var length = (table.rows.length) - 1;
element3.name = "kol";
cell4.appendChild(element3);
}
function deleteRow(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for (var i = 0; i < rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if (null != chkbox && true == chkbox.checked) {
table.deleteRow(i);
rowCount--;
i--;
}
}
} catch (e) {
alert(e);
}
}
</SCRIPT>
<body>
<div class="col-md-4">
<form action="/save4" method="post">
<input type="text" name="dokument" class="form-control"
placeholder="Firstname" />
<div style="clear: both; display: block; height: 10px;"></div>
<input type="date" name="datum" class="form-control"
placeholder="15.01.2017" />
<div style="clear: both; display: block; height: 10px;"></div>
<TABLE id="dataTable" width="350px" border="1"
class="table table-bordered">
<tr>
<th width="10"></th>
<th width="10">Rb.</th>
<th>${last.id+1}</th>
</tr>
<TR>
<TD><INPUT type="checkbox" name="chk" /></TD>
<TD>1</TD>
<TD><input type='text' name="Artikal" /></TD>
<TD><input type='text' name="kol" /></TD>
</TR>
</TABLE>
</li> <INPUT type="button" value="Add Row" onclick="addRow('dataTable')"
class="btn" /> <INPUT type="button" value="Delete Row"
onclick="deleteRow('dataTable')" class="btn" /> <input
type="submit" class="btn btn-success" value="Save"></input>
</form>