#java #spring #spring-boot #thymeleaf #web-frontend
Вопрос:
я хочу, чтобы пользователь вставил информацию о клиенте и ввел сведения о продукте, и как только он нажмет «Добавить», в корзине будет создан товар, связанный с этой информацией о клиенте.
Основная проблема: когда я пытаюсь выбрать категорию, она не загружает никаких категорий
Категория
@Entity
@Data
public class Categories {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long categories_id;
private String categoryName;
У меня есть объекты Продукта,Клиента,заказа. Мне нужно найти взаимосвязь, чтобы собрать все эти сущности в объекте заказа, в котором будет храниться информация о клиентах и информация о продукте.
на этой Html-странице мне нужно создать ссылку на эту информацию, которая будет добавлена в объект заказа, чтобы при создании другой страницы получать все заказы, чтобы я мог просматривать все заказы с информацией, вставленной пользователем.
Сделайте HTML — страницу счета
Класс сущности клиента
@Entity
@Table(name="customers")
public class Customers {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long customer_id;
private String customer_fName;
private String customer_lName;
private String customer_email;
private String customer_address;
private String customer_state;
private String customer_phone;
private String customer_zipCode;
@OneToMany(targetEntity = Orders.class,cascade = CascadeType.ALL)
@JoinColumn(name = "customer_order_fk",referencedColumnName = "customer_id")//means will be a fk in orders table
private List<Orders> orders;
public Customers()
{
super();
}
public Customers(String customer_fName, String customer_lName, String customer_email, String customer_phone,String customer_address ,String customer_state,String customer_zipCode) {
this.customer_zipCode = customer_zipCode;
this.customer_phone = customer_phone;
this.customer_state = customer_state;
this.customer_address = customer_address;
this.customer_fName = customer_fName;
this.customer_lName = customer_lName;
this.customer_email = customer_email;
}
product Entity class
@Entity
@Table(name = "Products")
@Data
public class Products {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long product_id;
private String product_name;
private BigDecimal product_price;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "categories_id",nullable = false) //the name of the column in the other class and that name will be a column in the class
private Categories product_category;
private String product_quantity;
private String product_Section;
private String product_ExpDate;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "")
private Customers customer;
@ManyToOne
@JoinColumn(name = "order_order_id")
private Orders order;
public Products()
{
super();
}
public Products(String product_name, BigDecimal product_price,String product_quantity, String product_Section,String product_ExpDate) {
this.product_name = product_name;
this.product_price = product_price;
this.product_quantity = product_quantity;
this.product_Section = product_Section;
this.product_ExpDate = product_ExpDate;
}
CartItemsController
@Controller
public class CartItemsControllers {
@Autowired
private ShoppingCartImpService shoppingCartImpService;
//Model
@ModelAttribute("cartItem")
public CartItem cartItem()
{
return new CartItem();
}
//Curd
@GetMapping("/cart/create")
public String createCartItemForm(Model model)
{
//create order object
CartItem cartItem = new CartItem();
model.addAttribute("cartItem",cartItem);
return "makeABill";
}
//Save
@PostMapping("/cart/save")
public String saveCartItem(@ModelAttribute("cartItem") CartItem cartItem)
{
shoppingCartImpService.saveCart(cartItem);
return "MakeABill";
}
OrdersEntity
@Entity
@RequiredArgsConstructor
@AllArgsConstructor
@Data
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long order_id;
@OneToMany(fetch = FetchType.LAZY,mappedBy = "cart_item_id",cascade = CascadeType.ALL)
private Set<CartItem> cartItem;
private double total_price;
}
HTML-страница MakeABill
<div class="col-md-7 col-lg-8">
<h4 class="mb-3">Customer Information</h4>
<form class="needs-validation" novalidate="" th:action="@{/cart/save}" method="post" th:object="${cartItem}" id="form">
<div class="row g-3">
<div class="col-sm-6">
<label for="firstName" class="form-label">First name</label>
<input type="text" class="form-control" id="firstName" placeholder="" value="" required="" autofocus th:field="*{customer.customer_fName}">
<div class="invalid-feedback">
Valid first name is required.
</div>
</div>
<div class="col-sm-6">
<label for="lastName" class="form-label">Last name</label>
<input type="text" class="form-control" id="lastName" placeholder="" value="" required="" autofocus th:field="*{customer.customer_lName}">
<div class="invalid-feedback">
Valid last name is required.
</div>
</div>
<div class="col-12">
<br>
<label for="address" class="form-label">Address</label>
<input type="text" class="form-control" id="address" placeholder="Address" required="" autofocus th:field="*{customer.customer_address}">
<div class="invalid-feedback">
Please enter your shipping address.
</div>
</div>
</div>
<br>
<hr class="my-4">
<!--product info-->
<div class="row g-3">
<div class="col-12">
<h4 class="mb-3">Select A Product</h4>
<br>
<label th:for="category"> Category : </label>
<select class="form-control form-control-sm" id="category" name="category" autofocus>
<option value="">Select Category</option>
<option th:each = "product: ${cartItem}"
th:text="${product_category}"
>
</option>
</select>
<br>
<label th:for="product"> Product Name : </label>
<select class="form-control form-control-sm" id="product" name="product" autofocus>
<option value="">Select Product</option>
<option th:each = "product: ${cartItem}"
th:text="${product_name}"
>
</option>
</select>
<br>
<label th:for="product_price"> Product Price : </label>
<input class="form-control form-control-sm" id="product_price" name="product_price" disabled >
<br>
<label th:for="roles"> Product Quantity : </label>
<input class="form-control form-control-sm" id="product_Qty" name="product_Qty" autofocus>
<br>
<button class="w-5 btn btn-primary " type="submit" id="add_submit" >Add </button>
</div>
</div>
</form>
<br>
<hr class="my-4">
<!-- TABLE -->
<table class = "table table-striped table-bordered" id="show">
<thead class = "table-white">
<tr>
<th> Category </th>
<th> Product Name </th>
<th> Product Price </th>
<th> Product Quantity </th>
<th> Total </th>
<th> Edit </th>
<th> Delete </th>
</tr>
</thead>
<tbody>
<tr th:each = "product: ${product}"> <!-- this attribute to list up products -->
<td></td>
<td></td>
<td></td>
<td></td>
<td> <center> <a style="color: green"> Edit </a> </center> </td>
<td> <center> <a style="color: red"> Delete </a> </center> </td>
</tr>
</tbody>
</table>
<h4 class="mb-3"></h4>
<br>
<div class="row g-3">
<div class="col-12">
<h5 class="mb-3" id="total_bill"> Total:
lt;/h5>
</div>
</div>
<br>
<button class="w-100 btn btn-primary btn-lg" type="submit">Generate Bill</button>
</div>
Комментарии:
1. Вы должны указать фактическую ошибку, которую вы получаете
2. И в чем же ошибка?
3. спасибо за ваше время, ребята, я только что обновил страницу с ошибкой
4. Вы получаете доступ к *customer.customer_lname, это должно быть *customer.customer_lName
5. thnx Popeye, да, это работает, но теперь я столкнулся с другой проблемой, в категориях «показать», «товары» и «цена» все это не показывает, что в нем содержится, например, в категориях, когда я пытаюсь выбрать категорию, она не загружается и не показывает ни одну категорию, которую я создал раньше, чтобы я мог выбрать из
Ответ №1:
У вас есть опечатка в вашем HTML:
th:object="${CartItem}"
следует изменить на:
th:object="${cartItem}"
Поскольку ваш контроллер имеет:
@ModelAttribute("cartItem")
Комментарии:
1. спасибо, что заметили что-то подобное, но на самом деле это не решило проблему, я обновил вопрос. thnx еще раз, и lmk, если вы увидите какие-либо изменения