首页 > 解决方案 > Thymeleaf 绑定表中的选定值

问题描述

我有一个表,其中包含从列表生成的多个元素,并且该列表中的每个表元素都有一个按钮。通过单击该按钮,有一个发布提交请求,该请求应该将该表数据元素中的值绑定到 @ModelAttribute弹簧靴中的对象。问题是我能够映射整个列表,但我只想绑定按下按钮的表格元素。

<div class="table-responsive">
   <form th:action="@{/saveAd}" th:object="${object}" method="POST">
      <table class="table table-sm table-hover">
         <thead class="thead-dark">
            <tr>
               <th>Image</th>
               <th>Title</th>
               <!-- <th style="width: 16.66%">Link</th> -->
               <th>Price</th>
               <th>City</th>
            </tr>
         </thead>
         <tbody id="myTable">

            <th:block th:each="element, itemStat: *{lista}">

               <tr
                  th:onclick="'javascript:rowClicked(\'' + *{lista[__${itemStat.index}__].url} + '\');'">
                  <input type="hidden" readonly="readonly"
                     th:name="?"
                     th:value="${element.getUrl()}" />
                  <td>
                     <input type="hidden" readonly="readonly" th:name="img" th:value="${element.getImg()}" /> 
                     <img th:src="*{lista[__${itemStat.index}__].img}" class="size" name="img" />
                  </td>
                  <td>
                     <input type="hidden" readonly="readonly" th:name="?" th:value="${element.getTitle()}" />
                     <span th:text="*{lista[__${itemStat.index}__].title}"></span>
                  </td>
                  <td>
                     <input type="hidden" readonly="readonly" th:name="?" th:value="${element.getPrice()}" />
                     <span th:text="*{lista[__${itemStat.index}__].price}"></span>
                  </td>
                  <td>
                     <input type="hidden" readonly="readonly" th:name="?" th:value="${element.getCity()}" />
                     <span th:text="*{lista[__${itemStat.index}__].city}"></span>
                  </td>
                  <td><input class="btn btn-danger" type="submit"
                     value="Save"></td>
               </tr>
            </th:block>
         </tbody>
      </table>
   </form>
</div>

控制器:

@RequestMapping(path = "/saveAd", method = RequestMethod.POST)
    public String saveAd(@ModelAttribute("Value") ListCreationAutovitDto listCreationAutovitDto) {
        return "home";
    }

我对每个 td 都有一个隐藏的输入类型,它应该映射值,但我尝试以不同的方式命名它,但我无法让它工作。有没有办法只绑定按下按钮的值?

标签: springlistspring-bootdata-bindingthymeleaf

解决方案


想法1:让每个都td包含一个form指向你的控制器方法。input然后使用表单中的隐藏字段绑定要传递给模型的值。然后,每个按钮都会对其所在的表单进行提交。

想法 2:如果您将 json 映射到应用程序中的 java 对象,则可以在 JavaScript 中构造 json 请求主体,以仅包含该请求所需的内容


推荐阅读