Untitled

mail@pastecode.io avatar
unknown
plain_text
8 months ago
26 kB
2
Indexable
Never
//Shop.jsp

<%-- 
    Document   : Shop
    Created on : October 24, 2023, 2:10:09 PM
    Author     : Admin
--%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <!--        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                <title>JSP Page</title>-->
        <meta charset="UTF-8">
        <meta name="description" content="">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <!-- The above 4 meta tags *must* come first in the head; any other head content must come *after* these tags -->

        <!-- Title  -->
        <title>KiA Shop - Be good, Be bad, Be yourself | Shop</title>

        <!-- Favicon  -->
        <link rel="icon" href="img/core-img/favicon2.ico">

        <!-- Core Style CSS -->
        <link href="http://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
        <link rel="stylesheet" href="css/core-style.css">
        <link rel="stylesheet" href="style.css"> 
        <style>
            .searchbar{
                margin-bottom: auto;
                margin-top: auto;
                height: 50px;
                background-color: #f5f7fa;
                border-radius: 30px;
                padding: 8px;
            }

            .search_input{
                color: black;
                border: 0;
                outline: 0;
                background: none;
                width: 0;
                caret-color:transparent;
                line-height: 40px;
                transition: width 0.4s linear;
            }

            .searchbar > .search_input{
                padding: 0 10px;
                width: 360px;
                caret-color:red;
                transition: width 0.4s linear;
            }

            .searchbar > .search_icon{
                background: #f5f7fa;
                color: #e74c3c;
            }

            .search_icon{
                height: 40px;
                width: 40px;
                float: right;
                display: flex;
                justify-content: center;
                align-items: center;
                border-radius: 50%;
                color:white;
                text-decoration:none;
            }


        </style>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    </head>
    <body>
        <!-- Search Wrapper Area Start -->
        <jsp:include page="common/search.jsp"></jsp:include>
            <!-- Search Wrapper Area End -->

            <!-- ##### Main Content Wrapper Start ##### -->
        <jsp:include page="common/header.jsp"></jsp:include>
            <!-- Header Area End -->

            <div class="shop_sidebar_area">
                <div class="product-topbar d-xl-flex align-items-end justify-content-between">
                    <!-- Total Products -->
                    <div class="total-products">
                        <p>View All Products</p>
                        <div class="view d-flex">
                            <a href="ShopControl?showAllProducts=true"><i class="fa fa-th-large" aria-hidden="true"></i></a>
                        </div>
                    </div></div>
                <!-- ##### Single Widget ##### -->
                <div class="widget catagory mb-50">
                    <!-- Widget Title -->
                    <h6 class="widget-title mb-30">Catagories</h6>

                    <!--  Catagories  -->
                    <div class="catagories-menu">
                        <ul id="categoryMenu">
                        <c:forEach items="${listC}" var="o">
                            <li class="${tag == o.id ? "active":""}">
                                <a href="ShopControl?pageIndex=1&cID=${o.id}">${o.name}</a>
                            </li>
                        </c:forEach>
                    </ul>
                </div>



            </div>

            <!-- ##### Single Widget ##### -->
            <div class="widget brands mb-50">
                <!-- Widget Title -->
                <h6 class="widget-title mb-30">Price</h6>

                <div class="widget-desc">
                    <!-- Single Form Check -->
                    <div class="form-check">
                        <input class="form-check-input" type="radio" value="1" id="amado" name="price">
                        <label class="form-check-label" for="amado">Under $100</label>
                    </div>
                    <!-- Single Form Check -->
                    <div class="form-check">
                        <input class="form-check-input" type="radio" value="2" id="ikea" name="price">
                        <label class="form-check-label" for="ikea">$100 - $300</label>
                    </div>
                    <!-- Single Form Check -->
                    <div class="form-check">
                        <input class="form-check-input" type="radio" value="3" id="furniture" name="price">
                        <label class="form-check-label" for="furniture">$300 - $500</label>
                    </div>
                    <!-- Single Form Check -->
                    <div class="form-check">
                        <input class="form-check-input" type="radio" value="4" id="factory" name="price">
                        <label class="form-check-label" for="factory">$500 - $1000</label>
                    </div>
                    <!-- Single Form Check -->
                    <div class="form-check">
                        <input class="form-check-input" type="radio" value="5" id="artdeco" name="price">
                        <label class="form-check-label" for="artdeco">$1000 +</label>
                    </div>
                </div>
            </div>

            <!-- ##### Single Widget ##### -->
            <div class="widget color mb-50">
                <!--                 Widget Title 
                                <h6 class="widget-title mb-30">Color</h6>
                
                                <div class="widget-desc">
                                    <ul class="d-flex">
                                        <li>
                                            <a href="#" class="color1"></a>
                                        </li>
                                        <li>
                                            <a href="#" class="color2"></a>
                                        </li>
                                        <li>
                                            <a href="#" class="color3"></a>
                                        </li>
                                        <li>
                                            <a href="#" class="color4"></a>
                                        </li>
                                        <li>
                                            <a href="#" class="color5"></a>
                                        </li>
                                        <li>
                                            <a href="#" class="color6"></a>
                                        </li>
                                        <li>
                                            <a href="#" class="color7"></a>
                                        </li>
                                        <li>
                                            <a href="#" class="color8"></a>
                                        </li>
                                    </ul>
                                </div>-->
            </div>
        </div>

        <div class="amado_product_area section-padding-100">
            <div class="container-fluid">

                <div class="row">
                    <div class="col-12">
                        <div class="product-topbar d-xl-flex align-items-end justify-content-between">
                            <!-- Search Form -->
                            <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

                            <form action="SearchControl" method="get">
                                <input name="txt" type="text" placeholder="Search by name" value="${txtSearch}">
                                <select name="cID" ${showAllProducts ? 'disabled' : ''}>
                                    <c:if test="${empty cID || showAllProducts}">
                                        <option ${empty cID && showAllProducts ? 'selected' : ''}>All Products</option>
                                    </c:if>

                                    <c:forEach var="category" items="${listC}">
                                        <c:if test="${!empty cID && category.id eq cID}">
                                            <option value="${category.id}"selected>${category.name}</option>
                                        </c:if>
                                    </c:forEach>
                                </select>
                                <button type="submit">Search</button>
                            </form>


                            <!-- Sorting -->
                            <div class="product-sorting d-flex">
                                <div class="sort-by-date d-flex align-items-center mr-15">
                                    <p>Sort</p>
                                    <form action="#" method="get">
                                        <select name="select" id="sortBydate">
                                            <option value="value">Oldest</option>
                                            <option value="value">Newest</option>
                                            <option value="value">Popular</option>
                                            <option value="value">Price</option>
                                        </select>
                                    </form>
                                </div>
                                <div class="view-product d-flex align-items-center">
                                    <p>View</p>
                                    <form action="ShopControl" method="post">
                                        <select name="viewPage" id="viewProduct" onchange="this.form.submit()">
                                            <c:forEach items="${listView}" var="o">
                                                <option ${numberProduct == o?"selected":""} value="${o}">${o}</option>
                                            </c:forEach>
                                        </select>
                                    </form>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <!-- Đoạn này để hiển thị danh sách sản phẩm -->
                <div id="content" class="row">
                    <c:forEach items="${listP}" var="o">
                        <!-- Single Product Area -->
                        <div class="col-12 col-sm-6 col-md-12 col-xl-6">
                            <div class="single-product-wrapper">
                                <!-- Product Image -->
                                <div class="product-img">
                                    <img src="${o.image}" alt="">
                                    <!-- Hover Thumb -->
                                    <!--<img class="hover-img" src="img/product-img/product5.jpg" alt="">-->
                                </div>

                                <!-- Product Description -->
                                <div class="product-description d-flex align-items-center justify-content-between">
                                    <!-- Product Meta Data -->
                                    <div class="product-meta-data">
                                        <div class="line"></div>
                                        <p class="product-price">$${o.price}</p>
                                        <a href="productDetail?productID=${o.id}">
                                            <h6>${o.name}</h6>
                                        </a>
                                    </div>
                                    <!-- Ratings & Cart -->
                                    <div class="ratings-cart text-right">
                                        <div class="ratings">
                                            <i class="fa fa-star" aria-hidden="true"></i>
                                            <i class="fa fa-star" aria-hidden="true"></i>
                                            <i class="fa fa-star" aria-hidden="true"></i>
                                            <i class="fa fa-star" aria-hidden="true"></i>
                                            <i class="fa fa-star" aria-hidden="true"></i>
                                        </div>
                                        <div class="cart">
                                            <c:if test="${o.amount != 0}">
                                                <a href="cart?id=${o.id}&action=add" data-toggle="tooltip" data-placement="left" title="Add to Cart">
                                                    <img src="img/core-img/cart.png" alt="">
                                                </a>
                                                <a href="Shop.jsp" style='font-size:16px;' title="Add to favourite">&#129505;</a>
                                            </c:if>
                                            <c:if test="${o.amount == 0}">
                                                <a href="ShopControl" data-toggle="tooltip" data-placement="left">Sold out</a>
                                                <a href="FavouriteControl" style='font-size:16px;' title="Add to favourite">&#129505;</a>
                                            </c:if>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </c:forEach>
                </div>

                <div class="row">
                    <div class="col-12">
                        <!-- Pagination -->
                        <nav aria-label="navigation">
                            <ul class="pagination justify-content-end mt-50" id="paging">
                                <c:forEach begin="1" end="${totalPage}" var="i">
                                    <c:url var="pageURL" value="ShopControl">
                                        <c:param name="pageIndex" value="${i}" />
                                        <!-- Kiểm tra showAllProducts để thêm tham số cID khi cần -->
                                        <c:if test="${!showAllProducts}">
                                            <c:param name="cID" value="${cID}" />
                                        </c:if>
                                        <c:if test="${showAllProducts==true}">
                                            <c:param name="showAllProducts" value="${showAllProducts}" />
                                        </c:if>
                                    </c:url>

                                    <li class="page-item ${pageIndex == i ? 'active' : ''}">
                                        <a class="page-link" href="${pageURL}">
                                            ${i}
                                        </a>
                                    </li>
                                </c:forEach>

                            </ul>

                        </nav>
                    </div>
                </div>
            </div>
        </div>
        <input type="hidden" id="categoryID" value="${cID}"/>
    </div>
    <!-- ##### Main Content Wrapper End ##### -->

    <!-- ##### Newsletter Area Start ##### -->

    <!-- ##### Newsletter Area End ##### -->

    <!-- ##### Footer Area Start ##### -->
    <jsp:include page="common/footer.jsp"></jsp:include>
    <!-- ##### Footer Area End ##### -->

    <!-- ##### jQuery (Necessary for All JavaScript Plugins) ##### -->
    <script src="js/jquery/jquery-2.2.4.min.js"></script>
    <!-- Popper js -->
    <script src="js/popper.min.js"></script>
    <!-- Bootstrap js -->
    <script src="js/bootstrap.min.js"></script>
    <!-- Plugins js -->
    <script src="js/plugins.js"></script>
    <!-- Active js -->
    <script src="js/active.js"></script>

    <!-- Thêm script để thực hiện chức năng tìm kiếm -->

    <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>

</body>
</html>

//ShopControl.java
//@WebServlet(name = "ShopControl", urlPatterns = {"/ShopControl"})
public class ShopControl extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        DAO dao = new DAO();
        try {
            List<Category> listC = dao.getAllCategory();
            request.setAttribute("listC", listC);
            String currentCID = request.getParameter("cID");
            String showAllProductsParam = request.getParameter("showAllProducts");
            currentCID = (currentCID == null || currentCID.equals("")) ? String.valueOf(listC.get(0).getId()) : currentCID;
            boolean showAllProducts = Boolean.parseBoolean(showAllProductsParam);
            if (!showAllProducts) {
                request.setAttribute("cID", currentCID);
            }
            request.setAttribute("showAllProducts", showAllProducts);
            int pageIndex = (request.getParameter("pageIndex") != null) ? Integer.parseInt(request.getParameter("pageIndex")) : 1;
            if (showAllProducts) {
                List<Product> allProducts = dao.getAllProduct();
                int numberProductPerPage = 10;
                int pageSize = getPageSize(numberProductPerPage, allProducts.size());
                List<Product> paginatedProducts = paginateList(allProducts, pageIndex, numberProductPerPage);
                request.setAttribute("listP", paginatedProducts);
                request.setAttribute("pageIndex", pageIndex);
                request.setAttribute("totalPage", pageSize);
            } else {
                int numberProduct = (request.getParameter("numberProduct") != null) ? Integer.parseInt(request.getParameter("numberProduct")) : 6;
                List<Product> ls = dao.getProductByCid(currentCID);
                int pageSize = getPageSize(numberProduct, dao.getProductByCid(currentCID).size());

                request.setAttribute("listP", ls);
                request.setAttribute("numberProduct", numberProduct);
                request.setAttribute("pageIndex", pageIndex);
                request.setAttribute("totalPage", pageSize);
                request.setAttribute("tag", currentCID);
            }

            request.getRequestDispatcher("Shop.jsp").forward(request, response);
        } catch (Exception e) {
            e.printStackTrace();
            request.getRequestDispatcher("Shop.jsp").forward(request, response);
        }

    }

    // Hàm phân trang danh sách sản phẩm
    public List<Product> paginateList(List<Product> productList, int pageIndex, int numberProductPerPage) {
        int start = (pageIndex - 1) * numberProductPerPage;
        int end = Math.min(start + numberProductPerPage, productList.size());
        return productList.subList(start, end);

    }

    public int getPageSize(int numberProduct, int allProduct) {
        int pageSize = allProduct / numberProduct;
        if (allProduct % numberProduct != 0) {
            pageSize = (allProduct / numberProduct) + 1;
        }
        return pageSize;
    }

//SearchControl
@WebServlet(name = "SearchControl", urlPatterns = {"/SearchControl"})
public class SearchControl extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        String txtSearch = request.getParameter("txt");
        String cID = request.getParameter("cID");
        DAO dao = new DAO();
        List<Category> listC = dao.getAllCategory();
        request.setAttribute("listC", listC);
        List<Product> list;
        if (cID != null && !cID.isEmpty()) {
            list = dao.search(txtSearch, cID);
        } else {
            // Nếu không có danh mục, chỉ thực hiện tìm kiếm theo tên
            list = dao.searchByName(txtSearch);
        }

        request.setAttribute("listP", list);
        request.setAttribute("txtSearch", txtSearch);
        request.setAttribute("cID", cID);

        request.getRequestDispatcher("Shop.jsp").forward(request, response);
    }
//DAO.java
 public List<Product> search(String txtSearch, String cID) {
        List<Product> list = new ArrayList<>();
        String query = "SELECT * FROM Product WHERE isDeleted != 1";

        if (cID != null && !cID.trim().equals("")) {
            query += " AND cID = ?";
        }

        if (txtSearch != null && !txtSearch.trim().equals("")) {
            query += " AND pName LIKE ?";
        }

        try {
            DAO dao = new DAO();
            conn = new DBContext().getConnection();
            ps = conn.prepareStatement(query);

            int paramIndex = 1;

            if (cID != null && !cID.trim().equals("")) {
                ps.setInt(paramIndex++, Integer.parseInt(cID));
            }

            if (txtSearch != null && !txtSearch.trim().equals("")) {
                ps.setString(paramIndex++, "%" + txtSearch + "%");
            }

            rs = ps.executeQuery();

            while (rs.next()) {
                list.add(new Product(rs.getInt(1),
                        rs.getString(2),
                        rs.getString(3),
                        rs.getDouble(4),
                        rs.getString(5),
                        rs.getString(6),
                        rs.getInt(7), dao.getAllSubImageByPID(rs.getInt(1) + ""), rs.getInt(8), rs.getInt(9)));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public List<Product> searchWithPaging(String txtSearch, int pageIndex, int pageSize, String cID) {
        List<Product> list = new ArrayList<>();
        String query = "SELECT * FROM Product WHERE isDeleted != 1";

        if (cID != null && !cID.trim().equals("")) {
            query += " AND cID = ?";
        }

        if (txtSearch != null && !txtSearch.trim().equals("")) {
            query += " AND pName LIKE ?";
        }

        query += " ORDER BY pID OFFSET (? * ? - ?) ROWS FETCH NEXT ? ROWS ONLY";

        try {
            DAO dao = new DAO();
            conn = new DBContext().getConnection();
            ps = conn.prepareStatement(query);

            int paramIndex = 1;

            if (cID != null && !cID.trim().equals("")) {
                ps.setInt(paramIndex++, Integer.parseInt(cID));
            }

            if (txtSearch != null && !txtSearch.trim().equals("")) {
                ps.setString(paramIndex++, "%" + txtSearch + "%");
            }

            ps.setInt(paramIndex++, pageIndex);
            ps.setInt(paramIndex++, pageSize);
            ps.setInt(paramIndex++, pageSize);
            ps.setInt(paramIndex, pageSize);

            rs = ps.executeQuery();

            while (rs.next()) {
                list.add(new Product(rs.getInt(1),
                        rs.getString(2),
                        rs.getString(3),
                        rs.getDouble(4),
                        rs.getString(5),
                        rs.getString(6),
                        rs.getInt(7), dao.getAllSubImageByPID(rs.getInt(1) + ""), rs.getInt(8), rs.getInt(9)));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    //Sua code
    public List<Product> searchByName(String txtSearch) {
        List<Product> list = new ArrayList<>();
        String query = "select * from Product where pName like ?";
        try {
            conn = new DBContext().getConnection(); //mo ket noi toi sql
            ps = conn.prepareStatement(query);//nem cau lenh query sang sql
            ps.setString(1, "%" + txtSearch + "%");
            rs = ps.executeQuery();//chay cau lenh query, nhan ket qua tra ve
            DAO dao = new DAO();
            while (rs.next()) {
                list.add(new Product(rs.getInt(1),
                        rs.getString(2),
                        rs.getString(3),
                        rs.getDouble(4),
                        rs.getString(5),
                        rs.getString(6),
                        rs.getInt(7), dao.getAllSubImageByPID(rs.getInt(1) + ""), rs.getInt(8), rs.getInt(9)));
            }

        } catch (Exception e) {
        }
        return list;
    }

   
Leave a Comment