From 77d5c63542634963a2d3e44186959837b7e88684 Mon Sep 17 00:00:00 2001 From: Suzune <124695777+Suzune705@users.noreply.github.com> Date: Fri, 14 Nov 2025 05:12:39 +0700 Subject: [PATCH 1/2] feat(user): cursor pagnination --- .../controller/book/BookListController.java | 16 +++++++++++++++- src/java/com/library/dao/BookDaoImpl.java | 4 ++-- web/WEB-INF/views/book/booklist.jsp | 12 +++++++++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/java/com/library/controller/book/BookListController.java b/src/java/com/library/controller/book/BookListController.java index 3ec7749..ae5a3a0 100644 --- a/src/java/com/library/controller/book/BookListController.java +++ b/src/java/com/library/controller/book/BookListController.java @@ -41,10 +41,24 @@ public BookListController() { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String cursorParam = request.getParameter("cursor"); + String limitParam = request.getParameter("limit"); + + int cursor = (cursorParam == null) ? 0 : Integer.parseInt(cursorParam); + int limit = (limitParam == null) ? 20 : Integer.parseInt(limitParam); + try { - List bookList = bookDao.getAllBook(); + + List bookList = bookDao.getBooksByCursor(cursor, limit); + + int nextCursor = bookList.isEmpty() ? 0 : bookList.get(bookList.size() - 1).getBookID(); + request.setAttribute("bookList", bookList); + request.setAttribute("nextCursor", nextCursor); + request.setAttribute("limit", limit); + request.getRequestDispatcher("/WEB-INF/views/book/booklist.jsp").forward(request, response); + } catch (BookDataAccessException b) { logger.error("Error loading books", b); } diff --git a/src/java/com/library/dao/BookDaoImpl.java b/src/java/com/library/dao/BookDaoImpl.java index aa4b1e8..e08e2bd 100644 --- a/src/java/com/library/dao/BookDaoImpl.java +++ b/src/java/com/library/dao/BookDaoImpl.java @@ -369,8 +369,8 @@ public List getBooksByCursor(int cursor, int limit) { try (Connection conn = DBConnection.getInstance().getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { - ps.setInt(1, cursor); // ID cuối của trang trước (0 = trang đầu) - ps.setInt(2, limit); // số bản ghi muốn lấy + ps.setInt(1, cursor); + ps.setInt(2, limit); try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { diff --git a/web/WEB-INF/views/book/booklist.jsp b/web/WEB-INF/views/book/booklist.jsp index ae7aadd..5c240d8 100644 --- a/web/WEB-INF/views/book/booklist.jsp +++ b/web/WEB-INF/views/book/booklist.jsp @@ -321,7 +321,7 @@ Favorite - Setting + Setting Logout @@ -347,6 +347,16 @@ + +