电子商务系统的设计与实现(十三):分页组件,从前到后,从JS到Java
一、概述
学习实践Web开发5年多了,直到今天,我才算真正实现了最基本最常用的分页组件。
包括:
a.前端JS异步加载并渲染;
b.前端JSP、Freemarker、Struts标签渲染;
c.后端分页
自己写具体的分页算法和逻辑。
使用Mybatis分页插件。
今天,重点介绍下前端JS异步分页,简短介绍下后端Java提供数据。
二、 关键数据结构
public class PageVo {
/** 总记录数 */
protected Integer totalCount = 0;
/** 总共有多少页 */
protected Integer totalPage = 0;
/** 第几页 */
protected Integer pageNo = 1;
/** 每页显示条数 */
protected Integer pageSize = 10;
/** 表格中的数据 */
protected List<?> rows;
}
三、后端Java提供分页数据源的思路:
控制层
@RequestMapping("list")
public void list(PageVo pageVo, HttpServletResponse response) {
PageVo page = adminGoodsService.page(pageVo);
super.jsonPage(page, response);
}
服务层,就是获得PageVo对象,包含了分页和list集合的数据。
持久层,获得list和totalCount、totalPage等count数目, 具体思路就是用Mybatis拦截器,拦截list查询,截取list的sql,拼接成count。
关键规律:list的sql和count的sql,后半部分是完全一样的,比如
listSql ="select * from goods";
countSql =" select count(*) from goods":
四、 前端分页组件
Html内容部分
<table >
<thead>
<tr>
<th>流水号</th>
<th>ID</th>
<th>分类</th>
<th>名称</th>
<th>标题</th>
<th>现价</th>
<th>原价</th>
<th>浏览量</th>
<th>创建时间</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody id="bodyHolder"></tbody>
</table>
<div id="pageHolder"></div>
这部分,解决2个问题,1是表头部分确定了2是留出了2个div,“bodyHolder”和"pageHolder"。
bodyHolder最终放动态生成的表主体的html内容,pageHolder主要放动态生成的分页栏。
调用JS组件部分
<script>
(function() {
var fuPage = new FuPage(
{
"url" : "/goods/list.html",
"params" : {
"pageNo" : 1,
"pageSize" : 1
},
"bodyHolder" : "bodyHolder",
"pageHolder" : "pageHolder",
"tableTemplate" : "<tr><td>{id}</td><td>{goodsId}</td></tr>"
});
fuPage.send();
})();
</script>
url:提供数据源的url
params:分页参数,查询参数等参数部分
bodyHolder和pageHolder请参考上面的介绍
tableTemplate:表主体的一行row的模版。
JS组件的结构
function FuPage(options) {
this.url = options.url;
this.params = options.params; this.startNo = 1;
this.endNo = 1; this.tableTemplate = options.tableTemplate; this.bodyHolder=options.bodyHolder;
this.pageHolder=options.pageHolder;
}
//发送请求并渲染table
FuPage.prototype.send = function() {
var that = this; $.post(this.url, this.params, function(data) {
var page = data.page;
if (that.isTable) {
that.renderTable(page);
} else {
that.renderList(that, page);
}
renderPage(that, page);
addPageEvent(that, page);
});
} FuPage.prototype.renderTable = function(page) {}
// 渲染分页栏
function renderPage(fuPage, page) {}
// 为分页超链接绑定click事件
function addPageEvent(fuPage, page) {}
以上是主要的思路,前端异步,后端提供数据的一种解决方案。 待完善。
时候不早了,抽空续写,感谢大家“收看” ~
小雷FansUnion-博学的互联网技术工作者
2015年1月7日-凌晨
湖北-武汉-循礼门
电子商务系统的设计与实现(十三):分页组件,从前到后,从JS到Java的更多相关文章
- 电子商务系统的设计与实现(十):DWZ框架与第三方分页组件整合
晚上,就是刚刚,在后端管理系统中使用DWZ框架. 先是,直接使用官网网站的Demo,dwz-jui,与编程语言无关的纯静态的那个原始项目. 很快就搭建好了左侧菜单,打开菜单后,出现Tab页面,然后显示 ...
- 电子商务系统的设计与实现(七):前后端系统UI设计的一些思考
对于大部分开发者来说,写界面是最烦人的事.我想,开发者最初诞生,以及我们在大学学习的时候,更加侧重的是程序设计和逻辑思维,而不是界面.界面更象是艺术,艺术和程序设计是两回事. 我个人还是想成为全栈式开 ...
- 基于Web在线考试系统的设计与实现
这是一个课程设计的文档,源码及文档数据库我都修改过了,貌似这里复制过来的时候图片不能贴出,下载地址:http://download.csdn.net/detail/sdksdk0/9361973 ...
- 基于 bootstrap 的 vue 分页组件
申手党点这里下载示例 基于 bootstrap 的 vue 分页组件,我想会有那么一部分同学,在使用Vue的时候不使用单文件组件,因为不架设 NodeJS 服务端.那么网上流传的 *.vue 的各种分 ...
- B2C电子商务系统研发——商品SKU分析和设计(二)
转:http://www.cnblogs.com/winstonyan/archive/2012/01/07/2315886.html 上文谈到5种商品SKU设计模式,本文将做些细化说明. 笔者研究过 ...
- B2C电子商务系统研发——商品SKU分析和设计(一)
一.SKU及相关概念定义 在设计商品SKU之前,首先让我们熟悉一下SKU和相关的一些概念. # 什么是SKU: SKU=Stock Keeping Unit(库存量单位) 同一型号的商品,或者说是同一 ...
- 基于WPF系统框架设计(10)-分页控件设计
背景 最近要求项目组成员开发一个通用的分页组件,要求是这个组件简单易用,通用性,兼容现有框架MVVM模式,可是最后给我提交的成果勉强能够用,却欠少灵活性和框架兼容性. 设计的基本思想 传入数据源,总页 ...
- ASP.NET之电子商务系统开发-4(二级分类)
一.前言 继上次的订单,这是第四篇.记录一下分类和筛选.这功能是最后做的,因为我完全不懂其原理.后来通过同学的指导(一位很有天赋的同学,比我牛逼一个层次,同样是高三.:D),终于也是完成了.在写这篇博 ...
- 基于Mvc3,Ef,领域驱动电子商务系统的EShop开发
分享自己从代码小工一步步走向搭架子,ING... 简单了解UnitOfWork 摘要: UnitOfWorkUnit Of Work模式,即工作单元,它是一种数据访问模式.它是用来维护一个由已经被业务 ...
随机推荐
- ES5比较Jquery中的each与map 方法?
1.each es5: var arr = [1, 5, 7, 8, 9];var arr1 = []; arr.forEach(function (v, i) { arr1.push(v * 4) ...
- “焦点图/幻灯片”“Tab标签切换”“图片滚动”“无缝滚动”仅需一个SuperSlidev2.1
官网:http://www.superslide2.com/index.html 1. 标签切换 / 书签切换 / 默认效果 2. 焦点图 / 幻灯片 3. 图片滚动-左 4. 图片滚动-上 5. 图 ...
- Python中可避免读写乱码的一个强慷慨法
昨天在帮同学解析一批从网络上爬取的文件时,遇到一个奇葩的问题,文件本身的编码是gbk,Eclipse编辑环境的默认编码是utf8,使用常规的open方法批量打开文件时,某些文件里存在一些不可被gbk识 ...
- iOS_02_第一个C语言程序(理解编译、连接、运行)
一.开发工具的选择 1. 可以用来写代码的工具:记事本.ULtraEdit.Vim.Xcode等. 2. 选择XCode的原因:苹果公司官方提供的开发利器.简化开发的工程.有高亮显示功能. 3. 使用 ...
- Swift UIView 层次调整
Swift 中添加的UIView都是有层级的. 我们先添加三个看一看 let view1=UIView(frame: CGRectMake(10, 50, 200, 200)) let view2=U ...
- 2、Python基本数据类型
1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算: 5.成员运算: 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即- ...
- ios本地相册 照像 本地视频
-(IBAction)btnClick{ UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate: ...
- swift项目第八天:自定义转场动画以及设置titleView的状态
如图效果: 一:Home控制器 /* 总结:1:设置登陆状态下的导航栏的左右按钮:1:在viewDidLoad里用三目运算根据从父类继承的islogin的登陆标识来判断用户是否登陆来显示不同的界面.未 ...
- 22、DMA驱动程序框架
一.使用DMA的优点及DMA支持的请求源(请求源是启动DMA传输的事件,可以认为是触发.它可以是软件,也可以是中断,或者外部事件) 1.DMA优点是其进行数据传输时不需要CPU的干涉,可以大大提高CP ...
- css3-11 网页如何使用自定义字体
css3-11 网页如何使用自定义字体 一.总结 一句话总结:下载好字体文件,然后在网页中引入,用src: url('my.otf');来引入,使用的时候就使用自己定义的名字来使用这个字体. 1.网页 ...