文档章节

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

FansUnion
 FansUnion
发布于 2015/10/22 10:29
字数 706
阅读 44
收藏 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
丰台
高级程序员

暂无文章

WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
14
1
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部