Я застрял в этом вопросе на некоторое время. Я делаю приложение электронной коммерции, у меня есть класс продукта и класс CartItems.
Класс CartItems содержит продукт, потому что в корзине у вас есть продукты внутри, а CartItems в основном берет выбранный вами продукт и получает такие данные, как общая цена и количество.
CartItems:
@Table(name = "cartitems")
public class CartItems implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "quantity")
private int quantity;
@Column(name = "price")
private double price;
@OneToOne
@JoinColumn(name = "product_id")
private Product product;
@ManyToOne
@JoinColumn(name = "cart_id")
private Cart cart;
public CartItems() {
}
public CartItems(Product product, int quantity, double price, Cart cart) {
this.quantity = quantity;
this.price = price;
this.product = product;
this.cart = cart;
}
Страница каталога Thymeleaf:
<div th:each="product : ${popularProducts}">
<form action="#" th:action="@{'/cart/'}" th:object="${cartItem}" method="POST">
<div class="card">
<img class="card-img" th:src="${product.pictureUrl}">
<a href="#" class="card-link text-danger like">
<i class="fas fa-heart"></i>
</a>
</div>
<div class="card-body">
<h4 class="card-title" th:text="${product.getName()}"></h4>
<h6 class="card-subtitle mb-2 text-muted" th:text="${product.getCategory()}"></h6>
<p class="card-text" th:text="${product.getDescription()}">
<div class="buy d-flex justify-content-between align-items-center">
<div class="price text-success"><h5 class="mt-4" th:text="'$' + ${product.getPrice()}"></h5></div>
<div class="form-group blu-margin">
<div class="form-label-group">
<input th:field="*{cartItem.quantity}" type="text" id="quantity" name="quantity" class="form-control" placeholder="1" required="required">
</div>
</div>
<a href="#" class="btn btn-danger mt-3"><i class="fas fa-shopping-cart"></i> Add to Cart</a>
</div>
Проблема заключается в настройке CartItems.product равным текущему отображаемому продукту.
Я перебираю каждый продукт и если пользователь нажимает кнопку «Добавить в корзину», я хочу, чтобы поле продукта CartItem было равно отображаемому в данный момент продукту . Как вы вручную устанавливаете это, когда вы передаете его обратно в контроллер?
Есть ли способ просто набрать $ {cartItem.product = product} без необходимости пользователя вручную записывать его как ввод?
В качестве альтернативы, есть ли способ, которым я могу кормить продукт : $ {PopularProducts}, используя атрибут модели? Как мне сообщить об этом после отправки формы вместе с объектом CartItem?