Я получаю сообщение об ошибке, когда пытаюсь добавить товар в корзину с помощью Spring boot

#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, если вы увидите какие-либо изменения