Весенняя загрузка сохраняет список объектов с помощью thymeleaf

#spring-boot #thymeleaf

#весенняя загрузка #thymeleaf

Вопрос:

Я хочу сохранить объект (продукт) со списком объектов (атрибутов) и у меня проблема, потому что мне нужно использовать текст ввода для атрибута объекта.

Объект продукта

 public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonIgnore
    private Long id;
    private String name;
    
    @OneToMany(mappedBy="product", fetch=FetchType.EAGER)
    private Set<Attribute> attributes;
  

Объект атрибута

 public class Attribute {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonIgnore
    private long id;

    @JsonIgnore
    private String description;

    @JacksonXmlProperty(isAttribute = true)
    private String name;
  

моя форма в thymeleaf.

 <form action="#" th:action="@{/save}" th:object="${product}" method="post">
        <div class="form-group row">
            <label class="col-sm-3 col-form-label">Nazwa</label>
            <div class="col-sm-9">
                <input type="text" th:field="*{name}" class="form-control" placeholder="Nazwa">
            </div>
        </div>
       <!-- contener for input list Attributes -->
        <div class="form-group row">
            <label class="col-sm-3 col-form-label">Nazwa</label>
            <div class="col-sm-9">
                <input type="text" th:field="*{attributes}" class="form-control" placeholder="Nazwa">
            </div>
        </div>
            <button style="width: 200px; margin-bottom: 20px" type="submit" class="btn btn- 
    primary">Zapisz</button>
    </form>
  

Как я не могу ввести данные для хорошего продукта сохранения объекта?
Контроллер

 @RequestMapping("/new")
public String showNewProductPage(Model model) {
    Product product = new Product();
    model.addAttribute("product", product);
    
    return "new_product";
}

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String saveProduct(@ModelAttribute("product") Product product) {
    service.save(product);
    return "redirect:/";
}
  

Ответ №1:

конечно, атрибут имеет отношение к продукту.

 public class Attribute {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private long id;

@JsonIgnore
private String description;

@JacksonXmlProperty(isAttribute = true)
private String name;

@ManyToOne
@JoinColumn(name="product_id")
private Product product;