how2j.cn


10分59秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器

步骤 1 : homePage.html 的复杂性   
步骤 2 : homePage.html 代码讲解   
步骤 3 : homePage.html 所包含页面关系   
步骤 4 : categoryAndcarousel.html   
步骤 5 : categoryMenu.html   
步骤 6 : productsAsideCategorys.html   
步骤 7 : carousel.html   
步骤 8 : homepageCategoryProducts.html   
步骤 9 : 总结   

步骤 1 :

homePage.html 的复杂性

edit
增值内容,请先登录
完整的 Springboot 模仿天猫项目,使用 Springboot 、Vue.js、shiro、redis、elasticsearch 等一整套技术栈, 从无到有涵盖全部129个知识点,565个开发步骤, 充实 Springboot 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
步骤 2 :

homePage.html 代码讲解

edit
增值内容,请先登录
完整的 Springboot 模仿天猫项目,使用 Springboot 、Vue.js、shiro、redis、elasticsearch 等一整套技术栈, 从无到有涵盖全部129个知识点,565个开发步骤, 充实 Springboot 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
<div th:fragment="html"> <script> function showProductsAsideCategorys(cid){ $("div.eachCategory[cid="+cid+"]").css("background-color","white"); $("div.eachCategory[cid="+cid+"] a").css("color","#87CEFA"); $("div.productsAsideCategorys[cid="+cid+"]").show(); } function hideProductsAsideCategorys(cid){ $("div.eachCategory[cid="+cid+"]").css("background-color","#e2e2e3"); $("div.eachCategory[cid="+cid+"] a").css("color","#000"); $("div.productsAsideCategorys[cid="+cid+"]").hide(); } function homePageRegisterListeners(){ $("div.eachCategory").mouseenter(function(){ var cid = $(this).attr("cid"); showProductsAsideCategorys(cid); }); $("div.eachCategory").mouseleave(function(){ var cid = $(this).attr("cid"); hideProductsAsideCategorys(cid); }); $("div.productsAsideCategorys").mouseenter(function(){ var cid = $(this).attr("cid"); showProductsAsideCategorys(cid); }); $("div.productsAsideCategorys").mouseleave(function(){ var cid = $(this).attr("cid"); hideProductsAsideCategorys(cid); }); $("div.rightMenu span").mouseenter(function(){ var left = $(this).position().left; var top = $(this).position().top; var width = $(this).css("width"); var destLeft = parseInt(left) + parseInt(width)/2; $("img#catear").css("left",destLeft); $("img#catear").css("top",top-20); $("img#catear").fadeIn(500); }); $("div.rightMenu span").mouseleave(function(){ $("img#catear").hide(); }); var left = $("div#carousel-of-product").offset().left; $("div.categoryMenu").css("left",left-20); $("div.categoryWithCarousel div.head").css("margin-left",left); $("div.productsAsideCategorys").css("left",left-20); $("div.productsAsideCategorys div.row a").each(function(){ var v = Math.round(Math.random() *6); if(v == 1) $(this).css("color","#87CEFA"); }); } $(function(){ var data4Vue = { uri:'forehome', categories: [] }; //ViewModel var vue = new Vue({ el: '#workingArea', data: data4Vue, mounted:function(){ //mounted 表示这个 Vue 对象加载成功了 linkDefaultActions(); this.load(); }, methods: { load:function(){ var url = this.uri; axios.get(url).then(function(response) { vue.categories = response.data; vue.$nextTick(function(){ //要等渲染结束之后,才来进行监听,否则他们都没有被创建出来,监听也没有意义呀 homePageRegisterListeners(); }) }); } }, filters:{ subTitleFilter:function(value) { if (!value) return ''; //如果为空,则返回空字符串 return value.split(" ")[0]; //根据空格拆分,并且只获取数组第一个值 } } }); }); </script> <title>模仿天猫官网</title> <div class="homepageDiv"> <div th:replace="include/fore/home/categoryAndcarousel::html" ></div> <div th:replace="include/fore/home/homepageCategoryProducts::html" ></div> </div> </div>
步骤 3 :

homePage.html 所包含页面关系

edit
增值内容,请先登录
完整的 Springboot 模仿天猫项目,使用 Springboot 、Vue.js、shiro、redis、elasticsearch 等一整套技术栈, 从无到有涵盖全部129个知识点,565个开发步骤, 充实 Springboot 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
homePage.html 所包含页面关系
步骤 4 :

categoryAndcarousel.html

edit
增值内容,请先登录
完整的 Springboot 模仿天猫项目,使用 Springboot 、Vue.js、shiro、redis、elasticsearch 等一整套技术栈, 从无到有涵盖全部129个知识点,565个开发步骤, 充实 Springboot 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
categoryAndcarousel.html
<div th:fragment="html"> <img src="img/site/catear.png" id="catear" class="catear"/> <div class="categoryWithCarousel"> <div class="headbar show1"> <div class="head "> <span style="margin-left:10px" class="glyphicon glyphicon-th-list"></span> <span style="margin-left:10px" >商品分类</span> </div> <div class="rightMenu"> <span><a href=""><img src="img/site/chaoshi.png"/></a></span> <span><a href=""><img src="img/site/guoji.png"/></a></span> <span v-for="c,index in categories" v-if='index<=3'> <a :href="'category?cid='+c.id">{{c.name}}</a> </span> </div> </div> <div style="position: relative"> <div th:replace="include/fore/home/categoryMenu::html" ></div> </div> <div style="position: relative;left: 0;top: 0;"> <div th:replace="include/fore/home/productsAsideCategorys::html" ></div> </div> <div th:replace="include/fore/home/carousel::html" ></div> <div class="carouselBackgroundDiv"> </div> </div> </div>
步骤 5 :

categoryMenu.html

edit
增值内容,请先登录
完整的 Springboot 模仿天猫项目,使用 Springboot 、Vue.js、shiro、redis、elasticsearch 等一整套技术栈, 从无到有涵盖全部129个知识点,565个开发步骤, 充实 Springboot 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
categoryMenu.html
<div th:fragment="html"> <div class="categoryMenu"> <div :cid="c.id" class="eachCategory" v-for="c in categories"> <span class="glyphicon glyphicon-link"></span> <a :href="'category?cid='+c.id"> {{c.name}} </a> </div> </div> </div>
<div th:fragment="html"> 	
	<div class="categoryMenu">
				<div :cid="c.id" class="eachCategory" v-for="c in categories">
					<span class="glyphicon glyphicon-link"></span>
					<a :href="'category?cid='+c.id">
						{{c.name}}
					</a>
				</div>
	</div>  
</div>
步骤 6 :

productsAsideCategorys.html

edit
增值内容,请先登录
完整的 Springboot 模仿天猫项目,使用 Springboot 、Vue.js、shiro、redis、elasticsearch 等一整套技术栈, 从无到有涵盖全部129个知识点,565个开发步骤, 充实 Springboot 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
productsAsideCategorys.html
<div th:fragment="html"> <div :cid="c.id" class="productsAsideCategorys" v-for="c in categories"> <div class="row show1" v-for="ps in c.productsByRow"> <a :href="'product?pid='+p.id" v-for="p in ps" v-if="p.subTitle.length!=0"> {{p.subTitle | subTitleFilter}} </a> <div class="seperator"></div> </div> </div> </div>
<div th:fragment="html"> 
	<div  :cid="c.id" class="productsAsideCategorys" v-for="c in categories">
		<div class="row show1" v-for="ps in c.productsByRow">
					<a :href="'product?pid='+p.id" v-for="p in ps" v-if="p.subTitle.length!=0">
						{{p.subTitle | subTitleFilter}}
					</a>		
					<div class="seperator"></div>
		</div>
	</div>
</div>
	
增值内容,请先登录
完整的 Springboot 模仿天猫项目,使用 Springboot 、Vue.js、shiro、redis、elasticsearch 等一整套技术栈, 从无到有涵盖全部129个知识点,565个开发步骤, 充实 Springboot 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
carousel.html
<div th:fragment="html"> <div id="carousel-of-product" class="carousel-of-product carousel slide1" data-ride="carousel"> <!-- Indicators --> <ol class="carousel-indicators"> <li data-target="#carousel-of-product" data-slide-to="0" class="active"></li> <li data-target="#carousel-of-product" data-slide-to="1"></li> <li data-target="#carousel-of-product" data-slide-to="2"></li> <li data-target="#carousel-of-product" data-slide-to="3"></li> </ol> <!-- Wrapper for slides --> <div class="carousel-inner" role="listbox"> <div class="item active"> <img class="carousel carouselImage" src="img/lunbo/1.jpg" > </div> <div class="item"> <img class="carouselImage" src="img/lunbo/2.jpg" > </div> <div class="item"> <img class="carouselImage" src="img/lunbo/3.jpg" > </div> <div class="item"> <img class="carouselImage" src="img/lunbo/4.jpg" > </div> </div> </div>
步骤 8 :

homepageCategoryProducts.html

edit
增值内容,请先登录
完整的 Springboot 模仿天猫项目,使用 Springboot 、Vue.js、shiro、redis、elasticsearch 等一整套技术栈, 从无到有涵盖全部129个知识点,565个开发步骤, 充实 Springboot 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
homepageCategoryProducts.html
<div th:fragment="html"> <div class="homepageCategoryProducts"> <div class="eachHomepageCategoryProducts" v-for="c in categories"> <div class="left-mark"></div> <span class="categoryTitle">{{c.name}}</span> <br> <div class="productItem" v-for="p,index in c.products" v-if="index<5" > <a :href="'product?pid='+p.id"> <img width="100px" :src="'img/productSingle_middle/'+p.firstProductImage.id+'.jpg'"> </a> <a class="productItemDescLink" href="'product?pid='+p.id"> <span class="productItemDesc">[热销] {{p.name | subStringFilter(0,20)}} </span> </a> <span class="productPrice"> {{p.promotePrice | formatMoneyFilter}} </span> </div> <div style="clear:both"></div> </div> <img id="endpng" class="endpng" src="img/site/end.png"> </div> </div>
增值内容,请先登录
完整的 Springboot 模仿天猫项目,使用 Springboot 、Vue.js、shiro、redis、elasticsearch 等一整套技术栈, 从无到有涵盖全部129个知识点,565个开发步骤, 充实 Springboot 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2021-11-18 感觉既然都是用设置null的形式不用@JsonBackReference更好理解,代码改成都设置null就不会套娃了
鸡你太美噢北北




感觉既然都是用设置null的形式不用@JsonBackReference更好理解
	public void removeCategoryFromProduct(Category category) {
		List<Product> products =category.getProducts();
		if(null!=products) {
			for (Product product : products) {
				product.setCategory(null);
				product.getFirstProductImage().setProduct(null);
			}
		}

		List<List<Product>> productsByRow =category.getProductsByRow();
		if(null!=productsByRow) {
			for (List<Product> ps : productsByRow) {
				for (Product p: ps) {
					p.setCategory(null);
					p.getFirstProductImage().setProduct(null);
				}
			}
		}

							


1 个答案

鸡你太美噢北北
答案时间:2021-11-18
@ManyToOne
    @JoinColumn(name="pid")
    //@JsonBackReference//转为jSON对象时被忽略
	private Product product;



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2021-03-27 搜索栏下分类名没有显示
努力必进大厂




站长,照你这里的代码写的,搜索栏下面的分类没有显示 ①这里的${application.categories_below_search}是在哪里指定的,是不是后面才会说 ②这里的@{}用法 ③<div :cid="c.id" class="eachCategory" v-for="c in categories"> <span class="glyphicon glyphicon-link"></span> <a :href="'category?cid='+c.id"> {{c.name}} </a> 这里的:cid=“c.id”是什么用法,感觉好像没什么用处 麻烦站长解答
加载中

							

							


1 个答案

how2j
答案时间:2021-04-03
1. 嗯,后面 拦截器会讲到: https://how2j.cn/k/tmall_springboot/tmall_springboot-1902/1902.html 2. @{} 这个用法的知识点在: https://how2j.cn/k/springboot/springboot-url/1736.html 3. 有用,前端js进行显示隐藏切换的时候会用到



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2020-12-27 关于选择器
2020-10-24 homePage.html 下的监听有错误
2020-08-27 关于分类标签


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 17 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 实践项目-天猫整站Springboot-homePage.html 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图