文档章节

电子商务系统的设计与实现(十三):分页组件,从前到后,从JS到Java

FansUnion
 FansUnion
发布于 2015/10/22 10:29
字数 706
阅读 45
收藏 3
一、概述
   学习实践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日-凌晨

湖北-武汉-循礼门


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
FansUnion
粉丝 57
博文 858
码字总数 825464
作品 0
丰台
高级程序员
私信 提问

暂无文章

微服务分布式事务实现

https://www.processon.com/view/link/5b2144d7e4b001a14d3d2d30

WALK_MAN
今天
2
0
《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
今天
4
0
大数据教程(9.5)用MR实现sql中的jion逻辑

上一篇博客讲解了使用jar -jar的方式来运行提交MR程序,以及通过修改YarnRunner的源码来实现MR的windows开发环境提交到集群的方式。本篇博主将分享sql中常见的join操作。 一、需求 订单数据表...

em_aaron
今天
3
0
十万个为什么之什么是resultful规范

起源 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点...

尾生
今天
3
0
Terraform配置文件(Terraform configuration)

Terraform配置文件 翻译自Terraform Configuration Terraform用文本文件来描述设备、设置变量。这些文件被称为Terraform配置文件,以.tf结尾。这一部分将讲述Terraform配置文件的加载与格式。...

buddie
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部