#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;