赞
踩
关于网上书城的这个项目,博主前面的博客写的都是管理员(老板)的后台功能及前端框架,今天我们来写前台门户(游客)的功能:书籍分类列表和新书上架、热销书籍展示功能,今天的功能与前面三个项目进度都有着一定的关系,所以博主在此也提供前面的项目进度(贯通联系也比较大),能让更多的程序员对此项目有一定的了解
项目功能 |
---|
网上书城项目的需求分析、数据库表设计及前端界面的编写(项目进度一). |
网上书城项目的注册、登录功能及按照权限登录功能(项目进度二). |
网上书城项目的后台功能未上架查询、上架及下架书籍(项目进度三). |
网上书城项目的书籍分类列表展示及新书上架和热销书籍效果展示功能(项目进度四). |
书籍分类展示的后台代码就是查询书籍分类表,前台则利用ajax无刷新方法加载数据出来
相当于有企业来说,例如京东淘宝这样的大型网站,一般都会采用ajax无刷新的方法去动态加载数据,而foreach遍历也不是说不用,少用,因为它发送多次请求,会非常占用内存,所以博主这里采用的是ajax无刷新的方法
package com.xiaoqing.dao; import java.sql.SQLException; import java.util.List; import com.xiaoqing.entity.Category; import com.xiaoqing.util.BaseDao; import com.xiaoqing.util.PageBean; public class CategoryDao extends BaseDao<Category>{ public List<Category> list(Category category,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{ String sql="select * from t_easyui_category"; return super.executeQuery(sql, Category.class, pageBean); } }
public class CategoryAction extends ActionSupport implements ModelDriver<Category>{ private Category category =new Category(); private CategoryDao categoryDao =new CategoryDao(); @Override public Category getModel() { // TODO Auto-generated method stub return category; } public String combobox(HttpServletRequest req,HttpServletResponse resp) { try { List<Category> list = this.categoryDao.list(null, null); ResponseUtil.writeJson(resp, list); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } }
//书籍分类展示 $(function(){ var ctx=$("#ctx").val(); // 当浏览器访问http://localhost:8080/xiaoqing_mvc_easyUIBook/mainPag.jsp时,ajax要加载书籍列表 $.ajax({ url:ctx+"/category.action?methodName=combobox", success:function(data){ data=eval('('+data+')'); for(i in data){ // <li class="list-group-item">青春</li> $(".list-group").append("<li class='list-group-item'>"+data[i].name+"</li>"); $(".c-category li").eq(0).addClass('bg-color1'); $(".c-category li:gt(0)").addClass('bg-color2'); $(".c-category li:gt(0)").hover(function() { $(this).addClass("bg-opacity"); }, function() { $(this).removeClass("bg-opacity"); }); } } })
// 新书上架
public List<Book> news(Book book,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
String sql="select * from t_easyui_book where state=2 order by deployTime desc limit 10;";
return super.executeQuery(sql, Book.class, pageBean);
}
// 新书上架 public String news(HttpServletRequest req,HttpServletResponse resp) { try { List<Book> news = this.bd.news(null, null); ResponseUtil.writeJson(resp, Result.ok(news)); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; }
//书籍分类展示 $(function(){ var ctx=$("#ctx").val(); // 新书上架 $.ajax({ url:ctx+"/book.action?methodName=news", success:function(data){ data=eval('('+data+')'); appendBookDiv($(".news"),data.data,0,""); } }) //新书上架和热销书籍展示通用函数方法 /** * * @param $node :给哪个div追加html内容(jQuery对象) * @param data :最佳内容的数据来源(数组) * @param level :标识当前是第几行内容 * @param htmlstr :最终追加的HTML * @returns */ function appendBookDiv($node,data,level,htmlstr){ var ctx=$("#ctx").val(); // 第一行 :0~5 var start=level*6; // data数组的长度大小 var len=data.length; htmlstr+='<div class="row book">'; for(i=start;i<start+6;i++){ if(i==len) break; htmlstr+='<div class="col-sm-2">'; htmlstr+='<img src="'+ctx+data[i].image+'" >'; htmlstr+='<p>'+data[i].name+'</p>'; htmlstr+='<b>¥'+data[i].price+'</b>'; htmlstr+='</div>'; } htmlstr+='</div>'; level++; if(start+6>=len){ $node.append(htmlstr); }else{ // 递归:自己调自己 appendBookDiv($node,data,level,htmlstr); } }
// 热销书籍
public List<Book> hots(Book book,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
String sql="select * from t_easyui_book where state=2 order by sales desc limit 11;";
return super.executeQuery(sql, Book.class, pageBean);
}
// 热销书籍 public String hots(HttpServletRequest req,HttpServletResponse resp) { try { List<Book> hots = this.bd.hots(null, null); ResponseUtil.writeJson(resp, Result.ok(hots)); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; }
//书籍分类展示 $(function(){ var ctx=$("#ctx").val(); // 当浏览器访问http://localhost:8080/xiaoqing_mvc_easyUIBook/mainPag.jsp时,ajax要加载书籍列表 $.ajax({ url:ctx+"/category.action?methodName=combobox", success:function(data){ data=eval('('+data+')'); for(i in data){ // <li class="list-group-item">青春</li> $(".list-group").append("<li class='list-group-item'>"+data[i].name+"</li>"); $(".c-category li").eq(0).addClass('bg-color1'); $(".c-category li:gt(0)").addClass('bg-color2'); $(".c-category li:gt(0)").hover(function() { $(this).addClass("bg-opacity"); }, function() { $(this).removeClass("bg-opacity"); }); } } }) // 新书上架 $.ajax({ url:ctx+"/book.action?methodName=news", success:function(data){ data=eval('('+data+')'); appendBookDiv($(".news"),data.data,0,""); } }) // 热销书籍 $.ajax({ url:ctx+"/book.action?methodName=hots", success:function(data){ data=eval('('+data+')'); appendBookDiv($(".hots"),data.data,0,""); } }) }) /** * * @param $node :给哪个div追加html内容(jQuery对象) * @param data :最佳内容的数据来源 * @param level :标识当前是第几行内容 * @param htmlstr :最终追加的HTML * @returns */ function appendBookDiv($node,data,level,htmlstr){ var ctx=$("#ctx").val(); // 第一行 :0~5 var start=level*6; // data数组的长度大小 var len=data.length; htmlstr+='<div class="row book">'; for(i=start;i<start+6;i++){ if(i==len) break; htmlstr+='<div class="col-sm-2">'; htmlstr+='<img src="'+ctx+data[i].image+'" >'; htmlstr+='<p>'+data[i].name+'</p>'; htmlstr+='<b>¥'+data[i].price+'</b>'; htmlstr+='</div>'; } htmlstr+='</div>'; level++; if(start+6>=len){ $node.append(htmlstr); }else{ // 递归:自己调自己 appendBookDiv($node,data,level,htmlstr); } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" /> <link rel="stylesheet" type="text/css" href="css/fg.css" /> <!--导入js --> <script type="text/javascript" src="${pageContext.request.contextPath }/static/js/jquery-easyui-1.5.1/jquery.min.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath }/static/js/easyUI_mainPag(CateGory).js"></script> <title>首页</title> </head> <!--隐藏域:项目名 --> <input type="hidden" id="ctx" value="${pageContext.request.contextPath }"> <body class="body"> <div class="container"> <!-- 横幅 --> <div class="row"> <div class="col-sm-3"> 您好,欢迎来到飞凡网上书店 ! </div> <div class="col-sm-3 col-sm-offset-6"> <a href="login.jsp">登陆</a> | <a href="register.jsp">注册</a> | <b>我的购物车</b> | <i>网站首页</i> </div> </div> <!--搜索栏 --> <div class="row "> <div class="col-sm-12 search-parent"> <!-- 本来这里应该放一张背景图的 --> <div class="search"></div> <input type="text" id="book_name" name="name" value="" /> <button type="button" class="btn btn-primary">搜索</button> </div> </div> <!--主内容区 --> <div class="row content l-content"> <div class="col-sm-3"> <ul class="list-group c-category"> <!-- 白色字体未出现 --> <li class="list-group-item text-white bg-color1" style="color: white;">书籍分类</li> </ul> </div> <div class="col-sm-9 r-content"> <!-- 广告图片 --> <div class="guanggao"> <img src="images/banner.png" class="img-thumbnail" alt="..."> </div> <!-- 新书 --> <div class="news container"> <div class="tip row"> <img src="images/title_bj.png"> <h5 class="text-white" style="color: white;">新书上架</h5> </div> </div> <!-- 热销 --> <div class="hots container"> <div class="tip row"> <img src="images/title_bj.png"> <h5 class="text-white" style="color: white;">热销图书</h5> </div> </div> </div> </div> <hr color="#DFDFDF"> <!--底部版权 --> <div class="row"> <div class="col-sm-12 text-center"> Copyright ©2020 卓京教育,版权所有 </div> </div> </div> <script src="css/jquery-3.3.1.js" type="text/javascript" charset="utf-8"></script> <script src="css/bootstrap.js" type="text/javascript" charset="utf-8"></script> </body> </html>
今日的功能,博主可能写的不够详细,如有不太懂的地方欢迎留言,谢谢,今日的重点知识在新书上架和热销书籍展示一行显示多少条数据,什么时候该换行,利用递归调用完成,自己调自己,今天博主的分享就到这里了,敬请期待网上书城这个项目的后续功能!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。