如何将表单中的表绑定到Spring Boot中的HashSet?

时间:2017-11-20 03:47:54

标签: spring forms spring-boot thymeleaf

我不太确定如何解决这个问题。我有一个由填充了产品信息的数据表呈现的表。我试图找出一个表格,我可以插入数量和折扣值,然后保存所选字段或数量> 0.然后将表数据绑定到一个集或列表。

但是,我不太清楚如何编写绑定。我在这里已经阅读了这个question,但它似乎并不相同,因为我认为我不能使用索引,因为可能有大量的产品,因此可能会有大量的产品响应中的空值。任何帮助,将不胜感激。

Product.java

@Entity
@Table(name="products")
public class Product {
   @Getter
   @Setter
   @Id
   private Long productId;
   @Getter
   @Setter
   private Long productName; 
}

QuoteForm.java

public class QuoteForm {
   @Getter
   @Setter
   private Long quoteId;
   @Getter
   @Setter
   private Long contactId;
   @Getter
   @Setter
   private Set<ProductEntry> products;
 }

ProductEntry.java

public class ProductEntry {
  @Getter
  @Setter
  private TempProduct product;
  @Getter
  @Setter
  private Long quantity;
  @Getter
  @Setter
  private float discount;
}

form.html

<form id="productTable" th:object="${quoteForm}">
<input type="number" th:field="*{contactId}"></input>
<table id ="productList"
          class="table table-striped table-bordered"
          cellspacing="0"
          width="100%">
    <thead>
      <tr>
        <th>Name</th>
        <th>Quantity</th>
        <th>Discount</th>
      </tr>
   </thead>
   <tbody>
      <tr th:each="product : ${productData.getProducts()}">
      <td name="?">
          <a th:text="${product.getProductName()}"
                       th:href="@{|/product/records/${product.getProductId()}|}">
          </a>
      </td>
      <td>
          <input type="number" 
                 name="?" 
                 th:field="*{products.quantity}">
           </input>
      </td>
      <td>
         <input type="number" name="?" th:field="*{products.discount}"></input>
     </td>
    </tr>
  </tbody>

   

1 个答案:

答案 0 :(得分:0)

您可以使用“model.addAttribute()”进行绑定。在您的控制器中有这样的东西:

@RequestMapping("/example")
public String formParse(Model model) {
    //some logic

    Set<ProductEntry> productList = //code to get();

    model.addAttribute("productList", productList);

    //some more logic
    return "yourView";
}

此处“productList”是您已分配给“?”的名称。 至于检查数量,您可以在表单中执行此操作,例如:

<div th:if="*{products.quantity&gt;0}" th:field="*{products.quantity}"></div>

此处&amp; gt代表“大于”。 希望这有帮助!