自定义标签实现分页简单化

3 篇文章 0 订阅

由于前端框架书写分页比较繁琐,而且效率也不是很快,然后就想着使用java来实现分页逻辑,然后使用jsp的taglib功能自定义标签来实现。作用有二:1.效率快;2.前端开发快捷简单。

分页组件的主要元素有:页码、当前页标识(无链接)、上一页、下一页以及中间页的省略号。

分页简单逻辑:当前页为第一页则‘上一页’不显示;当前页为最后一页则‘下一页’不显示;上一页的页码为page-1,下一页的页码为page+1;显示最前两页、最后两页以及本页和本页的前后各四页(意思就是最大展示的页码数为13个,超过13页则使用省略号替代)。

分页所需参数:记录总数(用来计算页码数)、每页记录数(用来计算页码数)、当前页码(用来计算前后四页页码、用来判断是否显示上一页下一页等)、url模版(使用特殊字符标识来进行url页码替换等生成各页面对应的链接)

具体实现:

1.设计一个url格式化方法,专门用来生成页码对应的url

private static String formatUrl(String urlPattern, int page) {
		return urlPattern.replaceAll("\\[page\\]", page + "");
	}

有page来做替换标识,格式化url。

2.组装页码对象(将每一个页码都组装成一个对象,属性包括页码、显示名称、条状链接、是否有链接(因为当前页不跳转))

JSONObject page = new JSONObject();
		page.put("pageNum", pageNum);
		page.put("pageName", pageName);
		page.put("pageUrl", pageUrl);
		page.put("hasLink", hasLink);
		list.add(page);

3.封装添加页码对象的方法、批量添加页码对象的方法和添加省略号页码对象的方法

添加页码对象方法把2中的代码包装起来即可。

批量添加页码对象方法:

private static void addPages(List<JSONObject> list, int from, int to, String urlPattern, int page) {
		for (int p = from; p <= to; p++) {
			//TODO
		}
	}
这个方法涉及到了添加哪几个页码对象,由from和to决定,如果from小于to的话则该方法不会添加页码对象

4.主方法,根据规则组装页码对象列表,然后根据规则组装分页html式的字符串返回

分几个部分添加页码对象:

上一页:

if (page > 1) {
					addPage(pageList, page - 1, "上一页", formatUrl(urlPattern, page - 1), true);
				}
前两页:

addPages(pageList, 1, 2, urlPattern, page);//pageList为整个分页对象列表;urlPattern为链接模版;page为当前页用于判断某个分页对象是否有链接
当前页前后各4页:

addPages(pageList, from, to, urlPattern, page);
末尾两页:
addPages(pageList, (int)Math.max(count - 1, min), count, urlPattern, page);//count为总记录数,min为3
下一页:

if (page < count) {
					addPage(pageList, page + 1, "下一页", formatUrl(urlPattern, page + 1), true);
				}
需要考虑的特殊情况: 1 2 .. 4 的情况,直接加个 3,而不是 ...和  39 40 ... 42 43 的情况,直接加个 41,而不是 ...(即最后可以连续显示5页)
5.就是将分页对象列表按照一定规则解析成html的字符串。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值