文档章节

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

FansUnion
 FansUnion
发布于 2015/05/03 01:25
字数 683
阅读 52
收藏 1
一、概述
   学习实践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
粉丝 60
博文 858
码字总数 825464
作品 0
丰台
高级程序员
私信 提问

暂无文章

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
今天
6
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
10
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
6
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
8
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部