Thymeleaf绑定表中的选定值

时间:2018-09-24 16:33:27

标签: spring list spring-boot data-binding thymeleaf

我有一个表,该表包含从列表中生成的多个元素,并且该列表中的每个表元素都有一个按钮。单击该按钮,将有一个发布提交请求,该请求应将该表数据元素中的值绑定到Spring Boot中的@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有一个隐藏的输入类型,它应该映射值,但是我试图以不同的方式命名它,但我无法使其工作。有什么方法可以只绑定按下按钮时的值?

1 个答案:

答案 0 :(得分:0)

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

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