spring-data-jpa 如何将包含对象列表的对象从thymeleaf绑定到contoller

lmvvr0a8  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(166)

我正在做一个食谱应用程序。每个食谱将包含几个成分显然。
所以我把食谱和配料做成一对多的关系。这样我就可以在一个食谱中有多个配料。
但问题是,当我尝试使用thymeleaf网页添加食谱时,我想动态添加成分,我的意思是我想为每个食谱添加尽可能多的成分,我需要使用javascript使成分的输入框动态增加或减少。
下面是我的成分实体类:

public class Ingredient {
    @Id
    @GeneratedValue
    private int id;
    private String name;
    private String amount;
}

这是处方实体表

public class Recipe {
    @Id
    @GeneratedValue
    private int id;
    private String name;
    private String description;
    private String instruction;
    private Timestamp createdTime;

    @OneToMany(cascade=CascadeType.ALL)
    private List<Ingredient> ingredients = new ArrayList<>();
}

以下是添加配方的方法:

@GetMapping("/addRecipe")
public String addRecipeGet(Model model) {
    model.addAttribute("recipe", new Recipe());
    return "add_recipe";
}

@PostMapping("/addRecipe")
public String addRecipePost(Recipe recipe) {
    recipeService.createRecipe(recipe);
    return "home";
}

我尝试将recipe对象与thymeleaf绑定,如下所示:

<body>
<form method="POST" th:action="@{/addRecipe}" th:object="${recipe}" class="form-signup">
    <label class="form-label pt-3" for="name">Recipe Name</label>
    <input id="name" name="name" type="text" class="form-control mb-3" th:field="*{name}" placeholder="Recipe Name" />
    <label class="form-label pt-3" for="description">Description</label>
    <textarea id="description" name="description" type="text" class="form-control mb-3" th:field="*{description}" placeholder="Description"></textarea>
    <label class="form-label pt-3" for="instruction">Instruction</label>
    <textarea id="instruction" name="instruction" type="text" class="form-control mb-3" th:field="*{instruction}" placeholder="Instruction"></textarea>

    <ul>
        <li>
            <div>
                <input type="text" class="form-control mb-3" th:name="???" placeholder="ex) Onion"></input>
                <input type="text" class="form-control mb-3" th:name="???" placeholder="ex) 300g"></input>
            </div>
        </li>
    </ul>
    <div class="d-grid col-8 mx-auto">
        <button type="submit" class="btn btn-dark">Submit</button>
    </div>
</form>
</body>

我只是试着现在只绑定一种成分,但它显然不起作用..我不知道该在th:字段或th:名称中放入什么
我不知道如何在对象中发布数据列表
有没有办法解决这个问题?

k3bvogb1

k3bvogb11#

您可以使用相同格式的th:field="*{ingredients[i].name}"或name来系结清单项目。
有关如何在thymeleaf中处理列表绑定的完整指南,请参见https://www.baeldung.com/thymeleaf-list

相关问题