文档章节

电子商务系统的设计与实现(十三):分页组件,从前到后,从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
丰台
高级程序员

暂无文章

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
3
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部