首页 > 解决方案 > 如何在 Spring-MVC 中将数据从视图传递到控制器?

问题描述

我有一个作为 JSON 的对象列表,位于 workLists 中。我通过在 workLists 上使用每个迭代创建了一个表并在 thymeleaf 中创建一个表?

现在我如何将work 单个对象传递回控制器,我尝试使用的是th:object 我认为它可以工作,但在控制器端空值即将到来。

百里香叶部分

<tr th:each="work , status : ${workLists}">
    <td scope="row" th:text="${status.count}"></td>
    <td>
    <form th:action="@{/edit/work}" th:object="${work}" method="post">
        <button type="submit" class="dropdown-item">Edit</button>
    </form>
    </td>
</tr>

控制器部分

@PostMapping("/edit/work")
    public String editWork(@ModelAttribute("work") GetWorkkDto getWorkDto){
        logger.debug(" Inside of edit work method");
        return "listOfwork";
    }

标签: javajsonspring-bootthymeleaf

解决方案


您需要为控制器提供 2 个属性,即 workLists 和一个作品。它会是这样的:

@GetMapping("/edit/work")
public String editWork(Model model){
    model.addAttribute("workLists", workLists);
    model.addAttribute("workDTO", new Work());
    return "listOfwork";
}

然后在您的 HTML 页面中通过隐藏字段提供所选作品的值:

<table>
    <tr th:each="work, stat : ${workLists}">
            <td>
                <form action="#" th:action="@{/edit/work}" th:object="${workDTO}" method="post">
                    <input type="hidden"  th:attr="name='id'"  th:value="${work.id}" />
                    <input type="hidden"  th:attr="name='name'"  th:value="${work.name}" />
                    <input type="hidden"  th:attr="name='description'"  th:value="${work.description}" />
                    <p th:text="'Id : '+${work.id}"></p>
                    <p th:text="'Name : '+${work.name}"></p>
                    <p th:text="'Description : '+${work.description}"></p>
                    <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
                
                </form>
            </td>
    </tr>
</table>

你可以在提议的代码中看到我通过name属性将work.id的值赋给了workDTO.id(不要问我为什么会这样)

最后,您在控制器中检索对象(就像您已经做的那样),如下所示:

@PostMapping("/edit/work")
public String editWork(@ModelAttribute Work workDTO, Model model){
    System.out.println(workDTO.toString());
    model.addAttribute("workLists", workLists);
    model.addAttribute("workDTO", new Work());
    return "listOfwork";
}

推荐阅读