Próbuję wysłać dwa obiekty formularzem POST z wykorzystaniem Thymeleafa. Na chwilę obecną mój kod wygląda tak(u mnie działa ;) ):
<form th:action="@{/save}" method="post">
<p>Nazwa produktu: <input type="text"th:field="${formProduct.name}"/></p>
<p>Opis produktu: <textarea cols="60" rows="5" th:field="${formProduct.description}"></textarea></p>
<p>Ilość magazynowa: <input type="number"step="1"min="0"th:field="${formProduct.quantity}"/></p>
<p>Cena: <input type="number"step="0.01"min="0"th:field="${formProduct.price}"/> zł</p>
<p>Indeks produktu: <input type="text"th:field="${formProduct.index}"/></p>
<div th:object="${producer}">Wybierz producenta:
<select th:field="${producer.id}">
<option value="">-------------</option>
<option th:each="producer:${producers}" th:value="${producer.id}" th:text="${producer.name}"></option>
</select>
</div>
<p><input type="submit"value="Dodaj product"/></p>
</form>
Controller do tego:
@PostMapping("/save")
public String addProduct(@ModelAttribute Product formProduct, @ModelAttribute Producer producer, Model model) {
if(checkNotEmpty(formProduct)) {
model.addAttribute("formProduct", formProduct);
model.addAttribute("producer", producer);
formProduct.setId(null);
productService.addProduct(formProduct, producer.getId());
}
return "redirect:/admin";
}
Problem polega na tym, że do pól obiektu producer, które mają taką samą nazwę jak pola obiektu formProduct Thymeleaf przypisuje mi wartości z obiektu formProduct(description) i odwrotnie(formProduct ma przypisywane id z obiektu producer).
Jak widać obszedłem ten problem w mało elegancki sposób. Jak to zrobić, żeby to miało ręce i nogi?