1. Phân tích chức năng
Trang tìm kiếm là trang hiển thị thông tin các sản phẩm được tìm kiếm gần đúng theo tên
2. Thực thi
B1: Tạo servlet SearchServlet kế thừa lớp BaseServlet đóng vai trò controller cho trang tìm kiếm sản phẩm
HomeServlet có 2 phương thức doGet và doPost có vai trò xử lý 2 phương thức GET và POST của http
Với phương thức doGet sẽ sử dụng hàm getRequestDispatch nhúng giao diện ở thư mục view với mục đích hiển thị nội dung.
Để đổ dữ liệu từ database chúng ta cần lấy dữ liệu từ model ở mục controller này
package binh.dev;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import binh.dev.data.dao.DatabaseDao;
import binh.dev.data.dao.ProductDao;
import binh.dev.data.model.Product;
/**
*
* @author binhdev
*/
public class SearchServlet extends BaseServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
super.doGet(request, response);
String key = request.getParameter("key");
int categoryId = Integer.parseInt(request.getParameter("categoryId"));
// int categoryId = Integer.parseInt(request.getParameter("categoryId"));
ProductDao productDao = DatabaseDao.getInstance().getProductDao();
// Tránh trường hợp rỗng-- báo lỗi
List<Product> productList = new ArrayList<Product>();
if (categoryId == 0) {
productList = productDao.findByName(key);
} else {
productList = productDao.findByCategoryOfName(categoryId, key);
}
request.setAttribute("productList", productList);
request.getRequestDispatcher("category.jsp").include(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
B2: Tạo tập tin search.jsp để đổ dữ liệu ra giao diện ở mục view/search.jsp
Sử dụng thư viện JSTL để ứng dụng Template Engine
<%@include file="./inc/header.jsp"%>
<div id=app__container"">
<div class="top-arrival container">
<!-- top new arrivals -->
<div class="row">
<h1 class="heading-title">Product List</h1>
</div>
<!-- heading product -->
<div class="heading-bar">
<span class="heading-desc">
Browse the collection of our best selling and top interesting products.
</span>
<ul class="heading-list">
<li class="heading-item">
<span class="heading-text heading-text-color"> New arrivals</span>
</li>
<li class="heading-item">
<span class="heading-text"> Featured </span>
</li>
</ul>
</div>
<!-- top new product -->
<div class="row">
<c:forEach items="${productList}" var="product">
<div class="col-md-3 col-sm-6 col-sx-12">
<div class="product-item">
<div class="product-image-wrap">
<a href="ProductDetailServlet?productId=${product.id}" class="product-image-wrap-link">
<img src="${product.thumbnail}" alt="" class="product-image">
</a>
<ul class="product-icon">
<li> <a href="ProductDetailServlet?productId=${product.id}"><i class="fa-regular fa-eye"></i></a></li>
<li> <a href="CartServlet"><i class="fa-solid fa-cart-shopping"></i></a></li>
<li> <a href=""><i class="fa-solid fa-arrows-rotate"></i></a></li>
<li> <a href=""><i class="fa-regular fa-heart"></i></a></li>
</ul>
</div>
<form class="product-footer" action="CartServlet" method="post">
<input type="hidden" name="action" value="create"/>
<input type="hidden" name="quantity" value="1" min="1" />
<input type="hidden" name="productId" value="${product.id}"/>
<input type="hidden" name="productPrice" value="${product.price}"/>
<span class="product-short-desc">${product.description}</span>
<h1 class="product-title">${product.name}</h1>
<div class="product-price">
<span class="product-price-1">
<fmt:setLocale value = "en_US"/>
<fmt:formatNumber type="currency" value = "${product.price}" />
</span>
</div>
<button type="submit" class="_btn _btn-product">Add to cart</button>
</form>
</div>
</div>
</c:forEach>
</div>
</div>
</div>
<%@include file="./inc/footer.jsp"%>
0 Nhận xét