【问题标题】:Spring Boot: Saving List of ValuesSpring Boot:保存值列表
【发布时间】: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


    【解决方案1】:

    让我把它分成多个部分。

    基本上,由于您可能将数据保存到数据库中,因此您也需要考虑一个好的数据模型来保存信息。当我们谈论关系数据库时,它当然是一种关系数据模型,您可以在其中将数据集拆分为符合数据建模的良好实践的实体。快速集思广益您的用例会提供一个包含HARDWARE_ITEMS 的表格。您可能会将DESCRIPTION 作为可变长度的文本字段。您的 SERIAL_NO 可以是主键或至少是一个唯一字段。 MODEL_NO 可能是引用 MODELS 表的外键,其中包含有关这些的更具体信息。

    作为描述,序列号和型号作为一个模型项目的元组属于一个元组,将前端的信息传输为List of descriptionsList of serialsList of model-no 是没有意义的。正如您所说,例如将这些对重新关联在一起会很痛苦。通常你会转移一个List of model-items,每个都包含它的三个属性。

    您可以有一个端点接受单个项目的结构。您的批量保存/编辑端点可以接受您可以相应地保存为实体的多个实例的项目列表。

    【讨论】:

      猜你喜欢
      • 2020-09-08
      • 2023-03-29
      • 2020-02-03
      • 1970-01-01
      • 2021-10-10
      • 2020-07-30
      • 2018-01-13
      • 2017-05-11
      • 2021-06-22
      相关资源
      最近更新 更多