【Spring+Mybatis+SpringMVC整合项目七】天猫商城(前台-搜索)

search.jsp

<form action="foresearch" method="post" >
        <div class="searchDiv">
            <input name="keyword" type="text" value="${param.keyword}" placeholder="时尚男鞋  太阳镜 ">
            <button  type="submit" class="searchButton">搜索</button>
            <div class="searchBelow">
                <c:forEach items="${cs}" var="c" varStatus="st">
                    <c:if test="${st.count>=5 and st.count<=8}">
                        <span>
                            <a href="forecategory?cid=${c.id}">
                                ${c.name}
                            </a>
                            <c:if test="${st.count!=8}">             
                                <span>|</span>             
                            </c:if>
                        </span>          
                    </c:if>
                </c:forEach>     
            </div>
        </div>
    </form>  

 通过search.jsp或者simpleSearch.jsp提交数据到路径 /foresearch, 导致ForeController.search()方法被调用
1. 获取参数keyword
2. 根据keyword进行模糊查询,获取满足条件的前20个产品
3. 为这些产品设置销量和评价数量
4. 把产品结合设置在model的"ps"属性上
5. 服务端跳转到 searchResult.jsp 页面

@RequestMapping("foresearch")
    public String search( String keyword,Model model){
 
        PageHelper.offsetPage(0,20);
        List<Product> ps= productService.search(keyword);
        productService.setSaleAndReviewNumber(ps);
        model.addAttribute("ps",ps);
        return "fore/searchResult";
    }
}

其中,有productService提供的search方法和setSaleAndReviewNumber方法

这两个方法的实现如下

首先修改ProductService,增加search方法

package com.how2java.tmall.service;
 
import java.util.List;
 
import com.how2java.tmall.pojo.Category;
import com.how2java.tmall.pojo.Product;
 
public interface ProductService {
    void add(Product p);
    void delete(int id);
    void update(Product p);
    Product get(int id);
    List list(int cid);
    void setFirstProductImage(Product p);
 
    void fill(List<Category> cs);
 
    void fill(Category c);
 
    void fillByRow(List<Category> cs);
 
    void setSaleAndReviewNumber(Product p);
 
    void setSaleAndReviewNumber(List<Product> ps);
 
    List<Product> search(String keyword);
}

修改ProductServiceImpl实现search方法,通过关键字进行模糊查询

@Override
    public List<Product> search(String keyword) {
        ProductExample example = new ProductExample();
        example.createCriteria().andNameLike("%" + keyword + "%");
        example.setOrderByClause("id desc");
        List result = productMapper.selectByExample(example);
        setFirstProductImage(result);
        setCategory(result);
        return result;
    }

再来时setSaleAndReviewNumber的方法,为商品附上评论和销量信息

@Override
    public void setSaleAndReviewNumber(Product p) {
        int saleCount = orderItemService.getSaleCount(p.getId());
        p.setSaleCount(saleCount);
 
        int reviewCount = reviewService.getCount(p.getId());
        p.setReviewCount(reviewCount);
    }
 
    @Override
    public void setSaleAndReviewNumber(List<Product> ps) {
        for (Product p : ps) {
            setSaleAndReviewNumber(p);
        }
    }

最后,把查询出来的结果放到searchResult.jsp上显示

代码片段

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
     
<div class="searchProducts">
     
    <c:forEach items="${ps}" var="p">
        <div class="productUnit" price="${p.promotePrice}">
            <a href="foreproduct?pid=${p.id}">
                <img class="productImage" src="img/productSingle/${p.firstProductImage.id}.jpg">
            </a>
            <span class="productPrice">¥<fmt:formatNumber type="number" value="${p.promotePrice}" minFractionDigits="2"/></span>
            <a class="productLink" href="foreproduct?pid=${p.id}">
             ${fn:substring(p.name, 0, 50)}
            </a>
             
            <a class="tmallLink" href="foreproduct?pid=${p.id}">天猫专卖</a>
 
            <div class="productInfo">
                <span class="monthDeal ">月成交 <span class="productDealNumber">${p.saleCount}笔</span></span>
                <span class="productReview">评价<span class="productReviewNumber">${p.reviewCount}</span></span>
                <span class="wangwang"><img src="img/site/wangwang.png"></span>
            </div>
             
        </div>
    </c:forEach>
    <c:if test="${empty ps}">
        <div class="noMatch">没有满足条件的产品<div>
    </c:if>
     
        <div style="clear:both"></div>
</div>

到这里,搜索的功能大致上就算完成了

猜你喜欢

转载自blog.csdn.net/weixin_41866960/article/details/84833781
今日推荐