一、分页查询:
1.1 前台:
<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <title>产品列表页</title> <link rel="icon" href="/static/search/assets/img/favicon.ico"> <link rel="stylesheet" type="text/css" href="/static/search/css/webbase.css" /> <link rel="stylesheet" type="text/css" href="/static/search/css/pages-list.css" /> <link rel="stylesheet" type="text/css" href="/static/search/css/widget-cartPanelView.css" /> <style> #chooseCategory{ display: none; } .dotted{ display: none; } </style> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> //1. 向字符串类扩展方法 String.prototype.contains=function(str){ return this.indexOf(str) > -1; } //2. 关键字查询 function search(){ drawPageNav() location.href = replaceParamVal(location.href,"keywords",$("#keywords").val()); } //3. 添加分类 function addCategory(v){ //在location.href中添加分类字段 drawPageNav() location.href = replaceParamVal(location.href,"category",v); return false; } //4. 显示分类面板,隐藏面包屑导航中的分类 // function hideCategory(v){ // $(v).css("display","none"); // categoryPanel.css("display","block"); // } //5. 添加品牌 function addBrand(v) { drawPageNav() location.href = replaceParamVal(location.href,"brand",v); return false; } //6. 添加规格 function addSpec(specText,optionName){ let val = (specText + ":" + optionName); drawPageNav() location.href = replaceParamVal(location.href,"spec",val,true); return false; } //7. 添加价格区间 function addPrice(price){ drawPageNav() location.href = replaceParamVal(location.href,"price",price); return false; } //8. 排序价格 function addSort(sortField,sortOrder){ //参数1:排序字段 参数2:排序升序(asc)还是降序(desc) drawPageNav() location.href = replaceParamVal(location.href,"sort",sortOrder + ":" + sortField); return false; } //9. 分页查询 function findByPage(p){ drawPageNav(); location.href = replaceParamVal(location.href,"page",p); return false; } $(function(){ drawPageNav(); }) /** * 功能: 绘制按钮导航 * 参数: * 返回值: * 时间: 2021/8/5 15:10 */ function drawPageNav(){ //0. 定义代表前后省略号的变量 let firstDot = true; let lastDot = true; //1. 得到当前页 let page = [[${param.page == null ? 1 : param.page}]] //2. 得到总页数 let totalPage = [[${resultMap.totalPage}]] //3. 定义首页和尾页变量 let firstPage = 1; let lastPage = totalPage; //4. 根据情况得到首页与尾页 if(totalPage > 5){ if(page <= 3){ lastPage = 5; firstDot = false; }else if(page >= totalPage - 2){ firstPage = totalPage - 4; lastDot = false; }else{ firstPage = page - 2; lastPage = page + 2; } }else{ firstDot = false; lastDot = false; } //5. 根据首页与尾页遍历得到分页导航 //5.1 定义最终生成的标签字符串 let info = ""; for(let i = firstPage;i <= lastPage; i++){ info += "<li class="+ (i == page ? 'active' : '') +">"; info += "<a onclick=findByPage("+i+")>" + i + "</a>"; info += "</li>"; } //6. 为pageNav导航层赋值 $($(".page ul li")[1]).after(info); //7. 动态生成省略号 $(".dotted").css("display","none"); if(firstDot){ $("#first").css("display","inline-block"); } if(lastDot){ $("#last").css("display","inline-block"); } } /** * 功能:路径替换函数 * @param url 目前的url * @param paramName 需要替换的参数属性名 * @param replaceVal 需要替换的参数的新属性值 * @param forceAdd 该参数是否可以重复查询(spec=网络:4G&spec=机身内存:32G),即一次可以查询多个规格 * @returns {string} 替换或添加后的url */ function replaceParamVal(url, paramName, replaceVal,forceAdd=false) { let oUrl = decodeURI(url.toString()); let nUrl = ""; if (oUrl.contains(paramName+"=")) { let split = replaceVal.toString().split(":"); let str = paramName+"="+split[0]; if( forceAdd && !oUrl.contains(str)) { //第一次时向url添加内容 if (oUrl.contains("?")) { nUrl = oUrl + "&" + paramName + "=" + replaceVal; } else { nUrl = oUrl + "?" + paramName + "=" + replaceVal; } } else { // /category=手机/ig if(paramName.startsWith("spec")){ //替换规格内容 let re = eval('/(' + str + ':)([^&]*)/gi'); nUrl = oUrl.replace(re, str + ':' + split[1]); } else{ //替换除规格外的其它内容 let re = eval('/(' + paramName + '=)([^&]*)/gi'); nUrl = oUrl.replace(re, paramName + '=' + replaceVal); } } } else { // http://localhost:9001/student/list?username=aaa&pwd=123 if (oUrl.contains("?")) { //包含? nUrl = oUrl + "&" + paramName + "=" + replaceVal; } else { //不包含? nUrl = oUrl + "?" + paramName + "=" + replaceVal; } } return nUrl; } </script> </head> <body> <!-- 头部栏位 --> <!--页面顶部--> <div id="nav-bottom"> <!--顶部--> <div class="nav-top"> <div class="top"> <div class="py-container"> <div class="shortcut"> <ul class="fl"> <li class="f-item">泽易购欢迎您!</li> <li class="f-item">请 <a href="/static/search/login.html" target="_blank">登录</a> <span><a href="/static/search/register.html" target="_blank">免费注册</a></span></li> </ul> <ul class="fr"> <li class="f-item">我的订单</li> <li class="f-item space"></li> <li class="f-item"> <a href="/static/search/home.html" target="_blank">我的泽易购</a> </li> <li class="f-item space"></li> <li class="f-item">泽易购会员</li> <li class="f-item space"></li> <li class="f-item">企业采购</li> <li class="f-item space"></li> <li class="f-item">关注泽易购</li> <li class="f-item space"></li> <li class="f-item" id="service"> <span>客户服务</span> <ul class="service"> <li> <a href="/static/search/cooperation.html" target="_blank">合作招商</a> </li> <li> <a href="/static/search/shoplogin.html" target="_blank">商家后台</a> </li> <li> <a href="/static/search/cooperation.html" target="_blank">合作招商</a> </li> <li> <a href="#">商家后台</a> </li> </ul> </li> <li class="f-item space"></li> <li class="f-item">网站导航</li> </ul> </div> </div> </div> <!--头部--> <div class="header"> <div class="py-container"> <div class="yui3-g Logo"> <div class="yui3-u Left logoArea"> <a class="logo-bd" title="泽易购" href="/static/search/JD-index.html" target="_blank"></a> </div> <div class="yui3-u Center searchArea"> <div class="search"> <form class="sui-form form-inline" > <!--searchAutoComplete--> <div class="input-append"> <input type="text" th:value="${vo.keywords}" id="keywords" class="input-error input-xxlarge" /> <input class="sui-btn btn-xlarge btn-danger" type="button" onclick="search()" value="搜索"> </div> </form> </div> <div class="hotwords"> <ul> <li class="f-item">泽易购首发</li> <li class="f-item">亿元优惠</li> <li class="f-item">9.9元团购</li> <li class="f-item">每满99减30</li> <li class="f-item">亿元优惠</li> <li class="f-item">9.9元团购</li> <li class="f-item">办公用品</li> </ul> </div> </div> <div class="yui3-u Right shopArea"> <div class="fr shopcar"> <div class="show-shopcar" id="shopcar"> <span class="car"></span> <a class="sui-btn btn-default btn-xlarge" href="/static/search/cart.html" target="_blank"> <span>我的购物车</span> <i class="shopnum">0</i> </a> <div class="clearfix shopcarlist" id="shopcarlist" style="display:none"> <p>"啊哦,你的购物车还没有商品哦!"</p> <p>"啊哦,你的购物车还没有商品哦!"</p> </div> </div> </div> </div> </div> <div class="yui3-g NavList"> <div class="yui3-u Left all-sort"> <h4>全部商品分类</h4> </div> <div class="yui3-u Center navArea"> <ul class="nav"> <li class="f-item">服装城</li> <li class="f-item">美妆馆</li> <li class="f-item">品优超市</li> <li class="f-item">全球购</li> <li class="f-item">闪购</li> <li class="f-item">团购</li> <li class="f-item">有趣</li> <li class="f-item"> <a href="/static/search/seckill-index.html" target="_blank">秒杀</a> </li> </ul> </div> <div class="yui3-u Right"></div> </div> </div> </div> </div> </div> <!--list-content--> <div class="main"> <div class="py-container"> <!--bread--> <div class="bread"> <ul class="fl sui-breadcrumb"> <li> <a href="#">全部结果 总共:<span th:text="${resultMap.total}"/>条 </a> </li> <li class="active">智能手机</li> </ul> <ul class="tags-choose" id="chooseCategory"> <li class="tag">商品分类:<span></span><i class="sui-icon icon-tb-close" onclick="hideCategory(this.parentNode.parentNode)"></i></li> </ul> <div class="clearfix"></div> </div> <!--selector--> <div class="clearfix selector"> <div class="type-wrap"> <div class="fl key">商品分类</div> <div class="fl value"> <a href="#" th:each="category : ${resultMap.categoryList}" th:onclick="addCategory([[${category}]])">[[${category}]] </a> </div> <div class="fl ext"></div> </div> <div class="type-wrap logo"> <div class="fl key brand">品牌</div> <div class="value logos"> <ul class="logo-list"> <!--1.显示品牌--> <li th:each="brand : ${resultMap.brandList}" th:align="center"> <a href="#" th:onclick="addBrand([[${brand.text}]])">[[${brand.text}]]</a> </li> </ul> </div> </div> <!--2.显示规格列表--> <div class="type-wrap" th:each="spec,stat : ${resultMap.specList}"> <div class="fl key">[[${spec.text}]]</div> <div class="fl value"> <ul class="type-list"> <li th:each="option : ${spec.options}"> <a th:onclick="addSpec([[${spec.text}]],[[${option.optionName}]])"> [[${option.optionName}]]</a> </li> </ul> </div> <div class="fl ext"></div> </div> <div class="type-wrap"> <div class="fl key">价格</div> <div class="fl value"> <ul class="type-list"> <li> <a onclick="addPrice('0_500')">0-500元</a> </li> <li> <a onclick="addPrice('500_1000')">500-1000元</a> </li> <li> <a onclick="addPrice('1000_1500')">1000-1500元</a> </li> <li> <a onclick="addPrice('1500_2000')">1500-2000元</a> </li> <li> <a onclick="addPrice('2000_3000')">2000-3000元 </a> </li> <li> <a onclick="addPrice('3000_*')">3000元以上</a> </li> </ul> </div> <div class="fl ext"> </div> </div> <div class="type-wrap"> <div class="fl key">更多筛选项</div> <div class="fl value"> <ul class="type-list"> <li> <a>特点</a> </li> <li> <a>系统</a> </li> <li> <a>手机内存 </a> </li> <li> <a>单卡双卡</a> </li> <li> <a>其他</a> </li> </ul> </div> <div class="fl ext"> </div> </div> </div> <!--details--> <div class="details"> <div class="sui-navbar"> <div class="navbar-inner filter"> <ul class="sui-nav"> <li class="active"> <a href="#">综合</a> </li> <li> <a href="#">销量</a> </li> <li> <a href="#">新品</a> </li> <li> <a href="#">评价</a> </li> <li> <a href="#" onclick="addSort('price','asc')">价格↑</a> </li> <li> <a href="#" onclick="addSort('price','desc')">价格↓</a> </li> </ul> </div> </div> <div class="goods-list"> <ul class="yui3-g"> <li class="yui3-u-1-5" th:each="result : ${resultMap.rows}"> <div class="list-wrap"> <div class="p-img"> <a href="#" target="_blank"> <img th:src="${result.image}" /></a> </div> <div class="price"> <strong> <em>¥</em> <i th:text="${result.price}"></i> </strong> </div> <div class="attr"> <em th:utext="${result.title}"></em> </div> <div class="cu"> <em></em> </div> <div class="commit"> <i class="command">已有2000人评价</i> </div> <div class="operate"> <a href="/static/search/success-cart.html" target="_blank" class="sui-btn btn-bordered btn-danger">加入购物车</a> <a href="javascript:void(0);" class="sui-btn btn-bordered">对比</a> <a href="javascript:void(0);" class="sui-btn btn-bordered">关注</a> </div> </div> </li> </ul> </div> <div class="fr page"> <div class="sui-pagination pagination-large"> <ul> <li class="prev disabled"> <a href="#">«上一页</a> </li> <li class="dotted" id="first"><span>...</span></li> <!--两种处理数字与字符串转换的方式--> <!--<li th:class="${p+'' == param.page+''} ? 'active' : '' " th:each="p : ${#numbers.sequence(1,resultMap.totalPage)}">--> <!--<li th:class="${#numbers.formatInteger(p,0) == #numbers.formatInteger(param.page,0)} ? 'active' : '' "--> <!-- th:each="p : ${#numbers.sequence(1,resultMap.totalPage)}">--> <!-- <a href="#" th:onclick="findByPage([[${p}]])">[[${p}]]</a>--> <!--</li>--> <li class="dotted" id="last"><span>...</span></li> <li class="next"> <a href="#">下一页»</a> </li> </ul> <div><span>共[[${resultMap.totalPage}]]页 </span><span> 到第 <input type="text" class="page-num"> 页 <button class="page-confirm" onclick="alert(1)">确定</button></span></div> </div> </div> </div> <!--hotsale--> <div class="clearfix hot-sale"> <h4 class="title">热卖商品</h4> <div class="hot-list"> <ul class="yui3-g"> <li class="yui3-u-1-4"> <div class="list-wrap"> <div class="p-img"> <img src="/static/search/img/like_01.png" /> </div> <div class="attr"> <em>Apple苹果iPhone 6s (A1699)</em> </div> <div class="price"> <strong> <em>¥</em> <i>4088.00</i> </strong> </div> <div class="commit"> <i class="command">已有700人评价</i> </div> </div> </li> <li class="yui3-u-1-4"> <div class="list-wrap"> <div class="p-img"> <img src="/static/search/img/like_03.png" /> </div> <div class="attr"> <em>金属A面,360°翻转,APP下单省300!</em> </div> <div class="price"> <strong> <em>¥</em> <i>4088.00</i> </strong> </div> <div class="commit"> <i class="command">已有700人评价</i> </div> </div> </li> <li class="yui3-u-1-4"> <div class="list-wrap"> <div class="p-img"> <img src="/static/search/img/like_04.png" /> </div> <div class="attr"> <em>256SSD商务大咖,完爆职场,APP下单立减200</em> </div> <div class="price"> <strong> <em>¥</em> <i>4068.00</i> </strong> </div> <div class="commit"> <i class="command">已有20人评价</i> </div> </div> </li> <li class="yui3-u-1-4"> <div class="list-wrap"> <div class="p-img"> <img src="/static/search/img/like_02.png" /> </div> <div class="attr"> <em>Apple苹果iPhone 6s (A1699)</em> </div> <div class="price"> <strong> <em>¥</em> <i>4088.00</i> </strong> </div> <div class="commit"> <i class="command">已有700人评价</i> </div> </div> </li> </ul> </div> </div> </div> </div> <!-- 底部栏位 --> <!--页面底部--> <div class="clearfix footer"> <div class="py-container"> <div class="footlink"> <div class="Mod-service"> <ul class="Mod-Service-list"> <li class="grid-service-item intro intro1"> <i class="serivce-item fl"></i> <div class="service-text"> <h4>正品保障</h4> <p>正品保障,提供发票</p> </div> </li> <li class="grid-service-item intro intro2"> <i class="serivce-item fl"></i> <div class="service-text"> <h4>正品保障</h4> <p>正品保障,提供发票</p> </div> </li> <li class="grid-service-item intro intro3"> <i class="serivce-item fl"></i> <div class="service-text"> <h4>正品保障</h4> <p>正品保障,提供发票</p> </div> </li> <li class="grid-service-item intro intro4"> <i class="serivce-item fl"></i> <div class="service-text"> <h4>正品保障</h4> <p>正品保障,提供发票</p> </div> </li> <li class="grid-service-item intro intro5"> <i class="serivce-item fl"></i> <div class="service-text"> <h4>正品保障</h4> <p>正品保障,提供发票</p> </div> </li> </ul> </div> <div class="clearfix Mod-list"> <div class="yui3-g"> <div class="yui3-u-1-6"> <h4>购物指南</h4> <ul class="unstyled"> <li>购物流程</li> <li>会员介绍</li> <li>生活旅行/团购</li> <li>常见问题</li> <li>购物指南</li> </ul> </div> <div class="yui3-u-1-6"> <h4>配送方式</h4> <ul class="unstyled"> <li>上门自提</li> <li>211限时达</li> <li>配送服务查询</li> <li>配送费收取标准</li> <li>海外配送</li> </ul> </div> <div class="yui3-u-1-6"> <h4>支付方式</h4> <ul class="unstyled"> <li>货到付款</li> <li>在线支付</li> <li>分期付款</li> <li>邮局汇款</li> <li>公司转账</li> </ul> </div> <div class="yui3-u-1-6"> <h4>售后服务</h4> <ul class="unstyled"> <li>售后政策</li> <li>价格保护</li> <li>退款说明</li> <li>返修/退换货</li> <li>取消订单</li> </ul> </div> <div class="yui3-u-1-6"> <h4>特色服务</h4> <ul class="unstyled"> <li>夺宝岛</li> <li>DIY装机</li> <li>延保服务</li> <li>泽易购E卡</li> <li>泽易购通信</li> </ul> </div> <div class="yui3-u-1-6"> <h4>帮助中心</h4> <img src="/static/search/img/wx_cz.jpg"> </div> </div> </div> <div class="Mod-copyright"> <ul class="helpLink"> <li>关于我们<span class="space"></span></li> <li>联系我们<span class="space"></span></li> <li>关于我们<span class="space"></span></li> <li>商家入驻<span class="space"></span></li> <li>营销中心<span class="space"></span></li> <li>友情链接<span class="space"></span></li> <li>关于我们<span class="space"></span></li> <li>营销中心<span class="space"></span></li> <li>友情链接<span class="space"></span></li> <li>关于我们</li> </ul> <p>地址:深圳市大冲国际</p> </div> </div> </div> </div> <!--页面底部END--> <!--侧栏面板开始--> <div class="J-global-toolbar"> <div class="toolbar-wrap J-wrap"> <div class="toolbar"> <div class="toolbar-panels J-panel"> <!-- 购物车 --> <div style="visibility: hidden;" class="J-content toolbar-panel tbar-panel-cart toolbar-animate-out"> <h3 class="tbar-panel-header J-panel-header"> <a href="" class="title"><i></i><em class="title">购物车</em></a> <span class="close-panel J-close" onclick="cartPanelView.tbar_panel_close('cart');" ></span> </h3> <div class="tbar-panel-main"> <div class="tbar-panel-content J-panel-content"> <div id="J-cart-tips" class="tbar-tipbox hide"> <div class="tip-inner"> <span class="tip-text">还没有登录,登录后商品将被保存</span> <a href="#none" class="tip-btn J-login">登录</a> </div> </div> <div id="J-cart-render"> <!-- 列表 --> <div id="cart-list" class="tbar-cart-list"> </div> </div> </div> </div> <!-- 小计 --> <div id="cart-footer" class="tbar-panel-footer J-panel-footer"> <div class="tbar-checkout"> <div class="jtc-number"> <strong class="J-count" id="cart-number">0</strong>件商品 </div> <div class="jtc-sum"> 共计:<strong class="J-total" id="cart-sum">¥0</strong> </div> <a class="jtc-btn J-btn" href="/static/search/#none" target="_blank">去购物车结算</a> </div> </div> </div> <!-- 我的关注 --> <div style="visibility: hidden;" data-name="follow" class="J-content toolbar-panel tbar-panel-follow"> <h3 class="tbar-panel-header J-panel-header"> <a href="#" target="_blank" class="title"> <i></i> <em class="title">我的关注</em> </a> <span class="close-panel J-close" onclick="cartPanelView.tbar_panel_close('follow');"></span> </h3> <div class="tbar-panel-main"> <div class="tbar-panel-content J-panel-content"> <div class="tbar-tipbox2"> <div class="tip-inner"> <i class="i-loading"></i> </div> </div> </div> </div> <div class="tbar-panel-footer J-panel-footer"></div> </div> <!-- 我的足迹 --> <div style="visibility: hidden;" class="J-content toolbar-panel tbar-panel-history toolbar-animate-in"> <h3 class="tbar-panel-header J-panel-header"> <a href="#" target="_blank" class="title"> <i></i> <em class="title">我的足迹</em> </a> <span class="close-panel J-close" onclick="cartPanelView.tbar_panel_close('history');"></span> </h3> <div class="tbar-panel-main"> <div class="tbar-panel-content J-panel-content"> <div class="jt-history-wrap"> <ul> <!--<li class="jth-item"> <a href="/static/search/#" class="img-wrap"> <img src="/static/search/.portal/img/like_03.png" height="100" width="100" /> </a> <a class="add-cart-button" href="/static/search/#" target="_blank">加入购物车</a> <a href="/static/search/#" target="_blank" class="price">¥498.00</a> </li> <li class="jth-item"> <a href="/static/search/#" class="img-wrap"> <img src="/static/search/portal/img/like_02.png" height="100" width="100" /></a> <a class="add-cart-button" href="/static/search/#" target="_blank">加入购物车</a> <a href="/static/search/#" target="_blank" class="price">¥498.00</a> </li>--> </ul> <a href="/static/search/#" class="history-bottom-more" target="_blank">查看更多足迹商品 >></a> </div> </div> </div> <div class="tbar-panel-footer J-panel-footer"></div> </div> </div> <div class="toolbar-header"></div> <!-- 侧栏按钮 --> <div class="toolbar-tabs J-tab"> <div onclick="cartPanelView.tabItemClick('cart')" class="toolbar-tab tbar-tab-cart" data="购物车" tag="cart"> <i class="tab-ico"></i> <em class="tab-text"></em> <span class="tab-sub J-count " id="tab-sub-cart-count">0</span> </div> <div onclick="cartPanelView.tabItemClick('follow')" class="toolbar-tab tbar-tab-follow" data="我的关注" tag="follow"> <i class="tab-ico"></i> <em class="tab-text"></em> <span class="tab-sub J-count hide">0</span> </div> <div onclick="cartPanelView.tabItemClick('history')" class="toolbar-tab tbar-tab-history" data="我的足迹" tag="history"> <i class="tab-ico"></i> <em class="tab-text"></em> <span class="tab-sub J-count hide">0</span> </div> </div> <div class="toolbar-footer"> <div class="toolbar-tab tbar-tab-top"> <a href="/static/search/#"> <i class="tab-ico "></i> <em class="footer-tab-text">顶部</em> </a> </div> <div class="toolbar-tab tbar-tab-feedback"> <a href="/static/search/#" target="_blank"> <i class="tab-ico"></i> <em class="footer-tab-text ">反馈</em> </a> </div> </div> <div class="toolbar-mini"></div> </div> <div id="J-toolbar-load-hook"></div> </div> </div> <!--购物车单元格 模板--> <script type="text/template" id="tbar-cart-item-template"> <div class="tbar-cart-item"> <div class="jtc-item-promo"> <em class="promo-tag promo-mz">满赠<i class="arrow"></i></em> <div class="promo-text">已购满600元,您可领赠品</div> </div> <div class="jtc-item-goods"> <span class="p-img"><a href="/static/search/#" target="_blank"><img src="/static/search/{2}" alt="{1}" height="50" width="50" /></a></span> <div class="p-name"> <a href="/static/search/#">{1}</a> </div> <div class="p-price"><strong>¥{3}</strong>×{4} </div> <a href="/static/search/#none" class="p-del J-del">删除</a> </div> </div> </script> <!--侧栏面板结束--> <script type="text/javascript" src="/static/search/js/plugins/jquery/jquery.min.js"></script> <!-- --> <script type="text/javascript"> $(function() { $("#service").hover(function() { $(".service").show(); }, function() { $(".service").hide(); }); $("#shopcar").hover(function() { $("#shopcarlist").show(); }, function() { $("#shopcarlist").hide(); }); }) </script> <script type="text/javascript" src="/static/search/js/model/cartModel.js"></script> <script type="text/javascript" src="/static/search/js/czFunction.js"></script> <script type="text/javascript" src="/static/search/js/plugins/jquery.easing/jquery.easing.min.js"></script> <script type="text/javascript" src="/static/search/js/plugins/sui/sui.min.js"></script> <script type="text/javascript" src="/static/search/js/widget/cartPanelView.js"></script> </body></html>
1.2 后台:
1.2.1 ItemVo实体类:
@Data@AllArgsConstructor@NoArgsConstructorpublic class ItemVo implements Serializable { //1. 查询关键字对象 private String keywords; //2. 商品分类 private String category; //3. 品牌查询 private String brand; //4. 规格查询(类似:[网络:4G,机身内存:128G]) private List<String> spec; //5. 价格区间(price:500_1000) private String price; //6. 排序(类似:asc:price) private String sort; //7. 当前页 private int page = 1; //8. 每页大小 private int pageSize = 10;}
1.2.2 ItemSearchServiceImpl服务层:
...//3.1 得到当前页 int page = params.getPage(); //3.2 得到每页大小 int pageSize = params.getPageSize(); NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder() .withPageable(PageRequest.of(page - 1,pageSize));... //21. 存放高亮数据到大集合 resultMap.put("rows",highlights); //当前分页记录集合 resultMap.put("categoryList",categoryList); //分类 resultMap.put("total",total); //总记录数 resultMap.put("totalPage",totalPage); //总页数
二、与首页对接 :
2.1 在portal-web这个模块中的resources/index.html文件中添加:
<!-- JS部分: --><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> function search(){ //1. 得到搜索框中的内容 let keywords = $("#keywords").val(); //2. 跳转到搜索页面 location.href = "http://search.zeyigou.com?keywords=" + keywords; } </script><!-- HTML部分: --><form action="" class="sui-form form-inline"> <!--searchAutoComplete--> <div class="input-append"> <input type="text" id="keywords" class="input-error input-xxlarge" /> <button class="sui-btn btn-xlarge btn-danger" type="button" onclick="search()">搜索</button> </div></form>
2.2 运行效果如下:

三、商品审核通过后,同步索引库:
3.1 在zyg-manager-web工程的goodsController中审核方法修改如下:
/** * 功能: 批量审核数据 * 参数: * 返回值: com.zelin.utils.R * 时间: 2021/7/30 16:11 */ @RequestMapping("/updateStatus") public R updateStatus(Long[] ids,String status){ //1. 审核商品 goodsService.updateStatus(ids,status); //2. 根据商品id查询sku列表 List<ItemEntity> entities = itemService.findItemsbyGoodsId(ids); //3. 查询出tb_item表的数据并同时更新到索引库中(增量更新) if(status.equals("1") && entities.size() > 0) { searchService.updateToIndex(entities); } return R.ok(); }
3.2 在zyg-sellerGoods-Service工程添加findItemsbyGoodsId()
@Override public List<ItemEntity> findItemsbyGoodsId(Long... ids) { return this.baseMapper.selectList(new QueryWrapper<ItemEntity>().in("goods_id",ids)); }
3.3 在zyg-search-Service工程定义导入到索引库方法:
/** * 功能: 将所有的商品添加到索引库中(增量更新) * 参数: * 返回值: void * 时间: 2021/8/5 16:54 */ @Override public void updateToIndex(List<ItemEntity> entities) { restTemplate.save(entities); }
3.4 最后在kibana中查询结果:
