步骤 2 : homePage.jsp 所包含页面关系 步骤 3 : categoryAndcarousel.jsp 步骤 4 : categoryMenu.jsp 步骤 5 : productsAsideCategorys.jsp 步骤 6 : carousel.jsp 步骤 7 : homepageCategoryProducts.jsp 步骤 8 : 总结
在homePage中要显示如下内容
1 天猫超市连接右侧有4个分类数据 2 竖状导航栏显示17个分类数据 3 每个分类又再对应不同的推荐产品集合 4 中部会显示17个分类 5 每个分类又显示前5款产品 6 每款产品又会显示第一张图片,标题,价格等信息 倘若把这些功能都在一个jsp中开发出来看,那么这个jsp就会变得非常的长,并且难以维护和扩展。在这里,就可以借鉴home.jsp的思路,把一个大的页面,拆成各个小的jsp,这样维护起来就相对容易了
1. categoryAndcarousel.jsp
分类和轮播 1.1 categoryMenu.jsp 竖状分类菜单 1.2 productsAsideCategorys.jsp 竖状分类菜单右侧的推荐产品列表 1.3 carousel.jsp 轮播 2. homepageCategoryProducts.jsp 总体17种分类以及每种分类对应的5个产品
categoryAndcarousel.jsp 页面利用ForeController传递过来的数据,天猫国际几个字旁边显示4个分类超链
另外包含了其他3个页面: categoryMenu.jsp productsAsideCategorys.jsp carousel.jsp 这3个页面在接下来的步骤就会讲到 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<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(){
$("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);
});
</script>
<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>
<c:forEach items="${cs}" var="c" varStatus="st">
<c:if test="${st.count<=4}">
<span>
<a href="forecategory?cid=${c.id}">
${c.name}
</a></span>
</c:if>
</c:forEach>
</div>
</div>
<div style="position: relative">
<%@include file="categoryMenu.jsp" %>
</div>
<div style="position: relative;left: 0;top: 0;">
<%@include file="productsAsideCategorys.jsp" %>
</div>
<%@include file="carousel.jsp" %>
<div class="carouselBackgroundDiv">
</div>
</div>
categoryMenu.jsp 显示左侧的竖状分类导航
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<div class="categoryMenu">
<c:forEach items="${cs}" var="c">
<div cid="${c.id}" class="eachCategory">
<span class="glyphicon glyphicon-link"></span>
<a href="forecategory?cid=${c.id}">
${c.name}
</a>
</div>
</c:forEach>
</div>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <div class="categoryMenu"> <c:forEach items="${cs}" var="c"> <div cid="${c.id}" class="eachCategory"> <span class="glyphicon glyphicon-link"></span> <a href="forecategory?cid=${c.id}"> ${c.name} </a> </div> </c:forEach> </div>
productsAsideCategorys.jsp 进行了三层遍历
1. 先取出每个分类 2. 然后取出每个分类的productsByRow集合 3. 根据productsByRow集合,取出每个产品,把产品的subTitle信息里的第一个单词取出来显示。 JQuery代码解释: 这个是用于随机挑选一个产品作为推荐产品,来进行高亮显示。 严格的说,应该是后台设置那个产品是推荐产品,不过这里偷懒了,直接在前端按照20%的概率,随机挑选了一个产品。 $("div.productsAsideCategorys div.row a").each(function(){ var v = Math.round(Math.random() *6); if(v == 1) $(this).css("color","#87CEFA"); }); <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<script>
$(function(){
$("div.productsAsideCategorys div.row a").each(function(){
var v = Math.round(Math.random() *6);
if(v == 1)
$(this).css("color","#87CEFA");
});
});
</script>
<c:forEach items="${cs}" var="c">
<div cid="${c.id}" class="productsAsideCategorys">
<c:forEach items="${c.productsByRow}" var="ps">
<div class="row show1">
<c:forEach items="${ps}" var="p">
<c:if test="${!empty p.subTitle}">
<a href="foreproduct?pid=${p.id}">
<c:forEach items="${fn:split(p.subTitle, ' ')}" var="title" varStatus="st">
<c:if test="${st.index==0}">
${title}
</c:if>
</c:forEach>
</a>
</c:if>
</c:forEach>
<div class="seperator"></div>
</div>
</c:forEach>
</div>
</c:forEach>
轮播部分,都是静态的页面,没有用到服务端数据
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<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>
<!-- Controls -->
<!-- <a class="left carousel-control" href="#carousel-of-product" role="button" data-slide="prev"> -->
<!-- <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> -->
<!-- </a> -->
<!-- <a class="right carousel-control" href="#carousel-of-product" role="button" data-slide="next"> -->
<!-- <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> -->
<!-- </a> -->
</div>
homepageCategoryProducts.jsp 进行了2次遍历
1. 遍历所有的分类,取出每个分类对象 2. 遍历分类对象的products集合,取出每个产品,然后显示该产品的标题,图片,价格等信息 注: 如下代码是用来限制页面总共显示多少个分类的,是测试使用的,正式业务上用不到,请忽略掉 <c:if test="${empty param.categorycount}"> <c:set var="categorycount" scope="page" value="100"/> </c:if> <c:if test="${!empty param.categorycount}"> <c:set var="categorycount" scope="page" value="${param.categorycount}"/> </c:if> <!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<c:if test="${empty param.categorycount}">
<c:set var="categorycount" scope="page" value="100"/>
</c:if>
<c:if test="${!empty param.categorycount}">
<c:set var="categorycount" scope="page" value="${param.categorycount}"/>
</c:if>
<div class="homepageCategoryProducts">
<c:forEach items="${cs}" var="c" varStatus="stc">
<c:if test="${stc.count<=categorycount}">
<div class="eachHomepageCategoryProducts">
<div class="left-mark"></div>
<span class="categoryTitle">${c.name}</span>
<br>
<c:forEach items="${c.products}" var="p" varStatus="st">
<c:if test="${st.count<=5}">
<div class="productItem" >
<a href="foreproduct?pid=${p.id}"><img width="100px" src="img/productSingle_middle/${p.firstProductImage.id}.jpg"></a>
<a class="productItemDescLink" href="foreproduct?pid=${p.id}">
<span class="productItemDesc">[热销]
${fn:substring(p.name, 0, 20)}
</span>
</a>
<span class="productPrice">
<fmt:formatNumber type="number" value="${p.promotePrice}" minFractionDigits="2"/>
</span>
</div>
</c:if>
</c:forEach>
<div style="clear:both"></div>
</div>
</c:if>
</c:forEach>
<img id="endpng" class="endpng" src="img/site/end.png">
</div>
虽然首页显示的内容非常多,可以说是前端里最复杂的一个展示页面,但是通过这种拆成小块jsp的思路,每个jsp页面的功能就相对单一了。 可以更好的帮助大家理解。
HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。
![]() |