Spring Boot 将字符串的JavaScript数组POST到Sping Boot /Thymeleaf表单对象中

lpwwtiir  于 2023-01-13  发布在  Spring
关注(0)|答案(1)|浏览(146)

我正在使用Sping Boot 和Thymeleaf以及一些vanilla JavaScript。在我的JavaScript中,我有一个字符串数组,如下所示:

var tags = ["ramen", "japanese"];

我想使用JavaScript在这个数组中动态添加/删除项目,然后再提交到后端。用户可以添加0.. * 标记。
数据只能通过HTMLx 1 m0n1x提交到后端,还有一个model属性可以将这些细节从HTML表单捕获到Spring中,称为VenueForm。

<form id="tag-form" class="form" method="POST" th:object="${venueForm} th:action="/venue/tag">

VenueForm.java

public class VenueForm {
    private List<String> tags;
    private Object otherStuff;
    ...
    // Getters and Setters
}

VenueController.java

@Controller
@RequestMapping("/venue/tag")
public class VenueController {

    @PostMapping
    public String createVenue(@ModelAttribute VenueForm venueForm){
       List<String> tags = venueForm.getTags();
       System.out.printLn(tag);
       return "tags"
    }
}

如何将JavaScript数组tags赋给Thymeleaf表单列表字段tags
通常输入来自th:field="*{tags}"的输入字段,但因为它是一个数组,我不知道如何实现这一点。任何帮助将不胜感激。请注意,jQuery不是一个选项,只有香草JS。
我曾尝试停止使用JS提交HTML表单,然后使用JS分配输入字段,但没有工作。

<input type="submit" value="Submit" th:onsubmit="submitForm(event)">

main.js

function submitForm(event){
    event.preventDefault();
    venueTagInput.value = JSON.stringify(tags);
    console.log("sumitting...");
}
mwkjh3gx

mwkjh3gx1#

这个现有的职位已经帮助我弄明白了这一点(Send Array using HTML)!Thymeleaf只是服务器端的一个模板引擎,它呈现为基本的HTML。2不需要做任何特定于Thymeleaf的事情来发送表单中的元素数组。3你必须遵循基本的HTML方式,在输入字段上使用name属性。你可以使用Javascript来创建新的DOM元素,并确保每个元素的索引都是递增的。在控制器端不需要任何改变。Spring可以计算出name=“tags[0]”是tages.get(0);

<input type="text" class="form-control tag" id="1" name="tags[0]" value="">

相关问题