【发布时间】:2020-11-19 11:12:40
【问题描述】:
我正在开发一个 Java Spring Boot Web 应用程序。与我的问题有关的页面是用户保存的表单。如下图所示:
以前我有它,因此用户只能保存一个硬件项目(一个描述、一个序列号和一个型号#)。但是,现在您可以看到可以有多个项目(这里是四个)。起初,我只是能够将描述、序列号和型号# 作为单独的字符串保存在数据库中的一条记录中。这工作得很好。但是,现在,我必须将这些项目保存为每个记录的三个类别(描述列表、序列号列表、模型#s 列表)中的每一个的字符串列表。所以,我的问题与我必须改变什么有关,以使这成为可能。下面首先展示的是NewRecord类中这3列的声明,声明为表:
@Size(min=0, max=100, message="{newRecord.hwDescription.size}")
@Column(name="hwDescription")
private String hwDescription;
@Size(min=0, max=100, message="{newRecord.hwSerialNumber.size}")
@Column(name="hwSerialNumber")
private String hwSerialNumber;
@Size(min=0, max=100, message="{newRecord.hwModelNumber.size}")
@Column(name="hwModelNumber")
private String hwModelNumber;
我在这里假设我只需将private String... 更改为private List<String>...。对我来说真正的困惑在于在下面的 newRecord.jsp 页面上做什么,您可以在下面看到相关的标记和 JavaScript:
<div id="hwAddition0">
<input class="removeItemButton0" type="button" value="Remove Item"
id="removeItemButton" onclick="removeHWItem(this)"
style="display: inline-block;">
<div class="form-row">
<div class="form-group col-md-4">
<label for="hwDescription" style="text-decoration: underline;">Description</label>
<form:textarea id="hwDescription" type="text"
class="form-control short" path="hwDescription"
name="hwDescription" placeholder="Description" maxlength="100"
rows="2" style="resize: none;" />
</div>
<div class="form-group col-md-4">
<label for="hwSerialNumber" style="text-decoration: underline;">Serial
#</label>
<form:input type="text" class="form-control" path="hwSerialNumber"
name="hwSerialNumber" placeholder="Serial #" maxlength="100" />
</div>
<div class="form-group col-md-4">
<label for="hwModelNumber" style="text-decoration: underline;">Model
#</label>
<form:input type="text" class="form-control" path="hwModelNumber"
name="hwModelNumber" placeholder="Model #" maxlength="100" />
</div>
</div>
<hr />
</div>
JS:
function removeHWItem(e) {
var text = e.parentElement.id;
count--;
if (count == 0) {
showHide();
return;
}
e.parentElement.remove();
}
var count;
$(function() {
count = 0;
});
$('#hwAdditionButton').click(
function() {
if (count == 0) {
var clonedObj = $("#hwAddition" + count).clone().attr('id',
'hwAddition' + (count + 1));
clonedObj.find("#removeItemButton" + count).attr('id',
'removeItemButton' + (count + 1));
clonedObj.insertAfter("#hwAddition" + count);
count++;
}
else {
var clonedObj = $("#hwAddition" + (count - 1)).clone()
.attr('id', 'hwAddition' + count);
clonedObj.find("#removeItemButton" + (count - 1)).attr(
'id', 'removeItemButton' + count);
clonedObj.insertAfter("#hwAddition" + (count - 1));
}
count++;
});
在添加和/或删除特定项目时,JS 会处理每个项目中元素 ID 的正确定义和重新定义。但是,由于这是 Spring Boot,真正的问题在于如何处理每个项目的每个元素的“路径”。这是一个问题,因为 hwDescription、hwModelNumber 和 hwSerialNumber 的列表都是一般定义的,它们后面没有数字,就像我对 id 所做的那样。对于每次添加/删除项目,我还可以将路径值重新定义为“hwDescription0”、“hwDescription1”、“hwDescription2”等。但是,返回原始列表变量名称“hwDescription”的路径将不正确。因此,我将不胜感激有关如何重新定义路径值(如果这是我什至需要做的话)的任何见解,以便保存的每个新项目都会为每个记录的这些列表添加一个 hwDescription、hwSerialNumber 和 hwModelNumber .
【问题讨论】:
标签: javascript java spring-boot hibernate jsp