胸腺叶形式具有相同类别的多个对象

问题描述

一个简单的问题,但是找不到解决方案:我有一个Thymeleaf表单,用于添加一个新对象,比如Book类。它工作得很好,我只需要那种特殊的形式来添加新对象,而不需要编辑现有对象。问题是:如何将Book类的几个对象放在同一单一形式中?因此,纯粹是为了方便起见,您不必一次填写一本书的表格并单击“发送”,而是可以一次填写几本书的表格,然后单击“发送”,将它们全部插入数据库(以任何顺序),还可以选择局部填写表格(例如,表格可容纳5本书,但也可以容纳1、2、3或4,您可以将其余的留空)。

编辑:我尝试将对象列表传递给Thymeleaf模板,并将其形式绑定到整个列表并在内部进行迭代,但是Thymeleaf在呈现它时抛出BingingResultError。

解决方法

您需要使用包装对象来实现所需的内容。 像这样:

public class BooksCreationDto {
    private List<Book> books;
 
    // default and parameterized constructor
 
    public void addBook(Book book) {
        this.books.add(book);
    }
    
    // getter and setter
}

然后,您需要将此对象作为模型属性传递给控制器​​:

BooksCreationDto booksForm = new BooksCreationDto();
model.addAttribute("form",booksForm);

使用索引属性绑定字段

   th:field="*{books[__${itemStat.index}__].title}"

并使用

获取结果
 @ModelAttribute BooksCreationDto form 

在您的控制器中。

有关完整且详细的说明,请访问:https://www.baeldung.com/thymeleaf-list