Không đổ được dữ liệu sản phẩm vào trang jsp java web

Chào mọi người hiện em đang học jsp java web và em có làm theo một bài trên mạng về làm cái web bán hàng.Em đã lấy được danh sách sản phẩm trong database rồi nhưng mà đổ lên jsp thì nó lại không hiện danh sách sản phẩm trong database lên ạ.Có thể em code sai ở phần controller nên mong mọi người xem giúp ạ.

Code phần homecontroller

package com.WebBanHang.controller;

import java.io.IOException;
import java.util.ArrayList;
import com.WebBanHang.model.Product;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.WebBanHang.dao.Dao;

@WebServlet(name = "HomeController", urlPatterns = {"/home"})
public class HomeController extends HttpServlet {
	
	protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        //b1: get data from dao
        Dao dao = new Dao();
        ArrayList<Product> list = dao.getAllProduct();
      
        //b2: set data to jsp
        request.setAttribute("listP", list);
        request.getRequestDispatcher("view/Home.jsp").forward(request, response);
        
    }
	@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
	
}

Code phần home.jsp

<c:forEach items="${listP}" var="o">
	<div class="row wow fadeIn">
        <!--Fourth column-->
        <div class="col-lg-3 col-md-6 mb-4">

          <!--Card-->
          <div class="card">

            <!--Card image-->
            <div class="view overlay">
              <img src="${o.image}" class="card-img-top" alt="">
              <a>
                <div class="mask rgba-white-slight"></div>
              </a>
            </div>
            <!--Card image-->

            <!--Card content-->
            <div class="card-body text-center">
              <!--Category & Title-->
              <a href="" class="grey-text">
                <h5>${o.name}</h5>
              </a>
              <h5>
                <strong>
                  <a href="" class="dark-grey-text">${o.description}</a>
                </strong>
              </h5>

              <h4 class="font-weight-bold blue-text">
                <strong>${o.price}</strong>
              </h4>

            </div>
            <!--Card content-->

          </div>
          <!--Card-->

        </div>
        <!--Fourth column-->

      </div>
      <!--Grid row-->
</c:forEach>

Ở Jsp thực hiện ép kiểu

<% ArrayList<Product> listP = (ArrayList<Product>) request.getAttribute("listP"); %>

2 Likes

Em có thêm vào nhưng em chạy vẫn không được ạ.Mà em có thử dùng cách usebean thì lúc gọi id với class được rồi nhưng mà lúc dùng id đó để lấy cái hàm getAllProduct() thì nó lại không có gợi ý gì cả, em xem trên mạng thấy họ gõ cái id rồi chấm 1 cái là nó đã đề xuất rồi mà sao của em lại không có.

cái này phải show error nó báo lên như nào mình mới giúp được.
Ngoài lề tí bạn học trường nào thế thấy form dạy quen quen

1 Like

Nó không báo lỗi gì anh ạ web nó vẫn cứ hiển thị được nhưng cái phần sản phẩm thì nó không hiển thị được thôi ạ.Em học utc còn phần code thì em code theo trên mạng thôi ạ.

vậy thì em thử debug vào phần listP ở controller xem có data không mà nó k hiển thị

bạn có tạo java bean chưa. Chụp luôn class java bean của lớp Product đi bạn. Kiểm tra xem có đủ constructor rỗng, có hàm getter chưa.

1 Like

Phần đó thì em có làm đầy đủ hết rồi ạ.Em kiểm tra xem dữ liệu lấy từ database lấy ra được chưa thì cũng có lấy được hết ra rồi mỗi tội đổ lên jsp thì nó lại không được :frowning:

xóa dòng này và thay bằng ;

RequestDispatcher dispatcher   = this.getServletContext().getRequestDispatcher("/view/Home.jsp");
        dispatcher.forward(request, response);

P/s : bạn chụp màn hình kết quả luôn. rồi không run được, hay run được mà không hiện gì ? hay có hiện các thẻ html đó nhưng không load đc nội dung ?

1 Like

Vẫn không được anh ạ.Ảnh đây ạ.Web vẫn hiển thị nhưng phần body hiển thị sản phẩm thì nó k hiển thị được ạ.

Bạn thử debug theo các này nhé !
B1 : tại trang homecontroller

bạn System.out.println(list); sau dòng trên, xem cái list này có dữ liệu không hay bị null?

B2 : tại trang home.jsp

bạn tìm chỗ nào trống ghi vào < h1>${listP}hello< h1> xem cái list có truyền qua được chưa hay bị null

chưa được thì bạn kiểm tra lại getAllProduct() trong lớp DAO

controller thì forward qua Home.jsp còn

trang home.jsp này có gì liên quan tới trang Home.jsp kia vậy bạn ?

B1 em thêm cái dòng in như của anh bảo thì console nó in ra như này là null đúng không ạ?


B2 em tạo trang jsp khác rồi làm như anh nói thì nó cũng hiển thị ra giống bước 1 cũng là null đúng không ạ?

Còn hàm getAllProduct() thì của em nó có hoạt động ạ em thử in ra trong lớp Dao thì nó in ra được dữ liệu trong database

Cả 2 là một ạ em viết hơi nhầm tí nhưng trong code em viết đúng ạ.

list không null, nhưng list rỗng không có phần tử nào cả. getAllProduct() tại controller không hoạt động. bạn in hàm getAllProduct() tại lớp controller và in getAllProduct() tại lớp DAO sẽ thấy sự khác biệt

1 Like

Vâng đúng là hàm getAllProduct trong controller không hoạt động ạ.Anh xem giúp em sai ở đâu với ạ.

Đoán mò cũng khó lắm bạn ơi, thôi thì bạn up nguyên cái project lên đây cho nhanh, hoặc lên github cũng đc

1 Like

https://drive.google.com/file/d/1dSZ9t3Z9-jUOnF-hg2UuIXNsKl9m2mgD/view?usp=sharing
đây ạ anh giúp em với ạ.Cảm ơn anh

tạo constructor rỗng cho lớp DAO đi bạn.

Rồi sao nữa hả anh?Em chạy vẫn chưa được ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?