`
fly533
  • 浏览: 107936 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

通用分页导航

阅读更多
根据指定当前页,分页记录条数,总页数,总行数,url等,生成页面分页导航链接的html代码

package com.gz.common.page;

import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

/**
 * 分页导航类 该类生成分页导航的html代码
 * 
 * @author 黄瑞文
 * 
 */
public class Page {
	private Logger logger = Logger.getLogger(Page.class);

	/**
	 * 声明:链接的其他查询条件,可以用struts的form表单提交,方可保留下一页时查询条件一样 若不使用form表单可以把查询条件连接到url末尾
	 * 
	 * @param totalPage
	 *            总页数
	 * @param totalRow
	 *            总行数
	 * @param pageSize
	 *            每页行数
	 * @param currentPage
	 *            当前页
	 * @param url
	 *            连接地址,需要把查询的其他条件加进来:例如test.do?name=h
	 * @return
	 */
	public String pageStr(int totalPage, int totalRow, int pageSize,
			int currentPage, String url) {
		int linkNum = 10;// 页面显示的链接数--页数的导航链接显示个数(可忽略)
		String navigation = "";
		// "&pageSize="+pageSize+
		// 表格封装分页导航
		navigation += "<div><table border=1><tr>";

		navigation += "<td>共" + totalPage + "页</td>";// 总页数
		// 上一页
		if (currentPage == 1) {
			// navigation += "<td><a href='"+url+"?page="+1+"'>上一页</a></td>";
		} else {
			navigation += "<td><a href='" + url + "&page=" + (currentPage - 1)
					+ "&pageSize=" + pageSize + "'>上一页</a></td>";
		}
		// 页数的导航链接
		navigation += "<td>第</td>";
		// 从第几页开始,使其成为导航链接
		int start = currentPage - linkNum / 2 <= 0 ? 1 : currentPage - linkNum
				/ 2;
		// 结束页
		int end = start + linkNum > totalPage ? totalPage : start + 10;
		// 当起始页和结束页,之差不够指定的页数时,从新给起始页赋值
		start = end - linkNum >= 0 ? end - linkNum == 0 ? 1 : end - linkNum
				: start;
		// System.out.println(start+"/"+end);

		for (int i = start; i <= end; i++) {
			if (i == currentPage) {
				navigation += "<td>" + currentPage + "</td>";// 当前页不在是链接
			} else {
				navigation += "<td><a href='" + url + "&page=" + i
						+ "&pageSize=" + pageSize + "'>" + i + "</a></td>";
			}
		}
		navigation += "<td>页</td>";

		if (currentPage == totalPage) {

		} else {
			navigation += "<td><a href='" + url + "&page=" + (currentPage + 1)
					+ "&pageSize=" + pageSize + "'>下一页</a></td>";
		}
		// 下十页
		navigation += "<td><a href='" + url + "&page=" + (currentPage + 10)
				+ "&pageSize=" + pageSize + "'>下十页</a></td>";

		navigation += "<td>共" + totalRow + "条</td>";
		// 每页显示的记录数;onchange='this.form.submit();'更改数量时提交表单--
		// 这时应返回第一页--这里没有实现
		navigation += "<td>每页 <select name='pageSize'  onchange='this.form.submit();'>";
		navigation += "<option value='" + pageSize + "'>" + pageSize
				+ "</option>";
		for (int psize = 0; psize <= totalRow;) {
			psize += totalRow / 30;
			navigation += "<option value='" + psize + "'>" + psize
					+ "</option>";
		}
		navigation += "</select>";
		navigation += "条</td>";

		navigation += "</tr></table></div>";

		return navigation;
	}

	/**
	 * 每次显示第1-10页的链接,每10页刷新链接
	 * 
	 * @param totalPage
	 *            总页数
	 * @param totalRow
	 *            总行数
	 * @param pageSize
	 *            每页行数
	 * @param currentPage
	 *            当前页
	 * @param url
	 *            连接地址,需要把查询的其他条件加进来:例如test.do?name=h
	 * @return
	 */
	public String pageStrTen(int totalPage, int totalRow, int pageSize,
			int currentPage, String url) {
		// int linkNum = 9;// 页面显示的链接数--页数的导航链接显示个数(可忽略)

		if (url.contains("?")) {
			url += "&";
		} else {
			url += "?";
		}
		//规避当前页小于0或大于总的页数。
		if(currentPage<=0){
			currentPage=1;
		}else if(currentPage>totalPage){
			currentPage=totalPage;
		}
		

		String navigation = "";
		// "&pageSize="+pageSize+
		// 表格封装分页导航
		navigation += "<div><table border=1><tr>";

		navigation += "<td>共" + totalPage + "页</td>";// 总页数
		// 上十页
		if (currentPage > 10) {// 如果当前页大于10页,说明有上10页
			// 回到上十页
			navigation += "<td><a href='" + url + "page=" + (currentPage - 10)
					+ "&pageSize=" + pageSize + "'>上十页</a></td>";
		}
		// 上一页
		if (currentPage == 1) {
			// navigation += "<td><a href='"+url+"?page="+1+"'>上一页</a></td>";
		} else {
			navigation += "<td><a href='" + url + "page=" + (currentPage - 1)
					+ "&pageSize=" + pageSize + "'>上页</a></td>";
		}
		// 页数的导航链接
		// navigation += "<td>第</td>";
		// 从第几页开始,使其成为导航链接
		int start = currentPage / 10 * 10;
		start = start == 0 ? 1 : start;// 规避等于0的情况
		start = start > totalPage ? totalPage : start;// 规避大于总的页数
		// 结束页
		int end = start + 9 > totalPage ? totalPage : start + 9;
		// 当起始页和结束页,之差不够指定的页数时,从新给起始页赋值

		for (int i = start; i <= end; i++) {
			if (i == currentPage) {
				navigation += "<td style='font-weight:bold; font-family:Verdana; font-size:12px;'>"
						+ currentPage + "</td>";// 当前页不在是链接
			} else {
				navigation += "<td><a href='" + url + "page=" + i
						+ "&pageSize=" + pageSize + "'>" + i + "</a></td>";
			}
		}
		// navigation += "<td>页</td>";

		if (currentPage != totalPage && currentPage < totalPage) {// 下页,
			navigation += "<td><a href='" + url + "page=" + (currentPage + 1)
					+ "&pageSize=" + pageSize + "'>下页</a></td>";
		}
		// 下十页
		if (currentPage + 10 < totalPage) {// 下十页,如果当前页加上10小于totalPage,说明还有下10页
			navigation += "<td><a href='" + url + "page=" + (currentPage + 10)
					+ "&pageSize=" + pageSize + "'>下十页</a></td>";
		}

		navigation += "<td>共" + totalRow + "条</td>";

		// navigation += "<td>第<select name='page'
		// onchange='this.form.submit();' style='width=50'>";
		navigation += "<td>第<select name='page'  onchange='change(this.value,"
				+ pageSize + ");' style='width=50'>";
		navigation += "<option value='" + currentPage + "'>" + currentPage
				+ "</option>";
		for (int pageNum = 5; pageNum <= totalPage;) {
			pageNum += 10;// 每10页递增
			navigation += "<option value='" + pageNum + "'>" + pageNum
					+ "</option>";
		}
		navigation += "</select>";
		navigation += "页</td>";

		// 每页显示的记录数;
		// 这时应返回第一页--
		navigation += "<td>每页 <select onchange='change(1,this.value);' style='width=50'>";
		navigation += "<option value='" + pageSize + "'>" + pageSize
				+ "</option>";
		navigation += "<option value='" + 25 + "'>" + 25 + "</option>";// 保留两个比较常用的分页数量
		navigation += "<option value='" + 50 + "'>" + 50 + "</option>";
		for (int psize = 0; psize <= totalRow;) {
			psize += totalRow / 25;
			navigation += "<option value='" + psize + "'>" + psize
					+ "</option>";
		}
		navigation += "</select>";
		navigation += "<input  VALUE='输入' onchange='change(1,this.value);' style='width=30;color:#A4A4A4' >";
		navigation += "条</td>";

		navigation += "</tr></table></div>";

		// javaScript
		navigation += "<script>";
		navigation += "function change(page,pageSize){";
		navigation += "	if(isNaN(pageSize)){";
		navigation += "		alert('每页显示的数量须为数字');";
		navigation += "		return false;";
		navigation += "	}";
		navigation += " window.location.href='" + url
				+ "page='+page+'&pageSize='+pageSize;";
		navigation += "}";
		navigation += "</script>";

		return navigation;
	}

	/**
	 * 
	 * @param request
	 * @return 返回 整型数组,int[0]是当前页,int[1]是每页要显示的记录数
	 */
	public int[] currentPageAndPageSize(HttpServletRequest request) {
		String cp = request.getParameter("page");
		String ps = request.getParameter("pageSize");
		logger.info("当前页:" + cp + "/" + ps);
		int currentPage = 1;
		int pageSize = 10;
		// 当没有触发提交表单,所以没有提交page--为空,会取从url传 过来的值
		if (cp != null && !cp.equals("")) {
			currentPage = Integer.parseInt(cp);
		}
		if (ps != null && !ps.equals("")) {
			pageSize = Integer.parseInt(ps);
		}
		int[] curPage = { currentPage, pageSize };
		return curPage;
	}

	public static void main(String[] args) {
		Page p = new Page();
		System.out.println(p.pageStrTen(16, 550, 10, 11, "test.do"));
	}
}



调用方法:
Page page=new Page();
		int[] curPage=page.currentPageAndPageSize(request);
		int currentPage=curPage[0];//页面返回的当前页
		int pageSize=curPage[1];//页面返回的分页显示的数量
		String nav = "";
		try {
			aList = aDao.findPaging(as, currentPage, pageSize);//分页查询结果
			if (aList.size() > 0)
				nav = page.pageStrTen(aList.get(0).getTotalPage(), aList
						.get(0).getTotalRows(), pageSize, aList.get(0)
						.getCurrentPage(), "attendance.do?method=findList");//调用分页导航方法,返回分页导航的字符串
request.setAttribute(paging, nav);//将分页导航送出			


页面:
 <body>
<div>
  <html:form action="attendance.do?method=findList" > 
        <html:submit>查   询</html:submit></div>    
</div>
输出结果
  <div>
 ${paging}	<!-- 取出分页导航,该导航需要被查询的form表单包含在内-->
<!-- 页面取出分页导航,该导航不再需要放在被查询的form表单包含在内。可以放在任意位置。-->
  </div>
  </html:form>
</div>
</body>



分享到:
评论

相关推荐

    JQuery+Ajax通用分页导航(任意表)

    通过ajax调用后端Servlet,(调后端的Servlet名叫testservlet 可以在wzjpage.js第27行处修改。)返回一个JSON对象,要求:jSON对象中必须有 // datarows columns pageCount这3个对象。 //数据格式必须为: List[]&gt;...

    分页导航通用类和js

    看了别人写的 分页条的显示 自己 结合个人项目也写了个,主要是针对 内存分页 涵盖 后台 数据处理,以及js显示,使用到了 jQuery ,分页条的样式 大家可以自行调整,感觉还凑合

    .NET 通用分页控件

    AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现...

    CSS实现18种垂直分页导航按钮动画特效源码.zip

    这组特效通用18种效果,可以用于制作幻灯片、页面切换和其它容器组件切换的分页导航按钮。本段代码兼容目前最新的各类主流浏览器,是一款非常优秀的特效源码。本代码适用浏览器:搜狗、360、FireFox、Chrome、Safari...

    18种垂直分页导航按钮动画特效

    这是一组效果非常炫酷的垂直分页导航按钮动画特效。这组特效通用18种效果,可以用于制作幻灯片、页面切换和其它容器组件切换的分页导航按钮。

    ASP.NET分页通用组件 支持很多自定义格式和传值方式

    这是我对网上一些分页组件改编而成的,它主要的特色是支持三种传值方式(JAVASCRIPT,POST,GET),它还支持各种自定义样式,很方便呐!

    分页AspNetPager

    三、AspNetPager分页控件本身并不显示任何数据,而只显示分页导航元素,数据在页面上的显示方式与该控件无关,所以需要手写数据连接方法来配合, 四、结合TOP 。。。NOT IN 的通用存储过程分页方法使用AspNetPager...

    Zebra_Pagination:用PHP编写的通用分页类-开源

    通用分页类,根据给定的项目总数和每页项目数,自动生成导航链接。 请注意,这是一个*通用*分页类,这意味着它不显示任何记录! 开发人员可以根据此类返回的信息来获取实际数据并进行显示。 优点是它可用于对来自...

    C#自定义分页控件

    三、AspNetPager分页控件本身并不显示任何数据,而只显示分页导航元素,数据在页面上的显示方式与该控件无关,所以需要手写数据连接方法来配合, 四、结合TOP 。。。NOT IN 的通用存储过程分页方法使用AspNetPager...

    CSS实现18种垂直分页导航按钮动画特效特效代码

    这组特效通用18种效果,可以用于制作幻灯片、页面切换和其它容器组件切换的分页导航按钮。本段代码兼容目前最新的各类主流浏览器,是一款非常优秀的特效源码。本代码适用浏览器:搜狗、360、FireF

    pager-taglib 分页扩展实例(旧)

    pager-taglib 是个很好的jsp分页标签,使用它结合jstl可以实现灵活的分页导航功能。在实际的开发中post方式的提交比较常见,本人做了一个比较通用的基于post方式的一个应用。主要实现一下功能: 1.添加输入跳转、每...

    pager-taglib 分页扩展实例

    pager-taglib 是个很好的jsp分页标签,使用它结合jstl可以实现灵活的分页导航功能。在实际的开发中post方式的提交比较常见,本人做了一个比较通用的基于post方式的一个应用。主要实现一下功能: 1.添加输入跳转、每...

    岁月新闻系统通用版源码 v3.3.rar

    2.导航菜单管理(前台采用jquery插件实现二级下拉菜单,后台可设置菜单的显示和隐藏) 3.客服功能(可以很方便的为企业和客户之间搭建沟通的桥梁。后台无限制添加QQ,6种样式一键切换) 4.分享功能(采用百度分享接口,...

    通用管理框架正式版1.1源码

    通用管理框架正式版1.1源码 更新内容: 编译已有代码,建立测试服务器虚拟目录,上传编译文件,初始化角色信息,整理开会讨论的个性模块变动和需求 编写获取页面标题函数,编写页面模块导航函数 弹出消息框代码编写 ...

    系统之家通用下载系统源码 v3.3.rar

    2.导航菜单管理(前台采用jquery插件实现二级下拉菜单,后台可设置菜单的显示和隐藏) 3.客服功能(可以很方便的为企业和客户之间搭建沟通的桥梁。后台无限制添加QQ,6种样式一键切换) 4.分享功能(采用百度分享接口,...

    欧博广告传媒行业通用版 v2.1.rar

    2.导航菜单管理(前台采用jquery插件实现二级下拉菜单,后台可设置菜单的显示和隐藏) 3.客服功能(可以很方便的为企业和客户之间搭建沟通的桥梁。后台无限制添加QQ,6种样式一键切换) 4.分享功能(采用百度分享接口,...

    欧博工业网站源码通用版 v1.0.rar

    2.导航菜单管理(前台采用jquery插件实现二级下拉菜单,后台可设置菜单的显示和隐藏) 3.客服功能(可以很方便的为企业和客户之间搭建沟通的桥梁。后台无限制添加QQ,6种样式一键切换) 4.分享功能(采用百度分享接口,...

    潍坊网址导航留言本 v1.0.rar

     此留言本系统的特点是简洁实用,安全可靠,代码很小,可维护性强,非常适用于一般通用网站留言本使用。  本次的修改主要是对于先前的UTF-8版本的一些错误进行了修正,  二、使用说明  1、index.asp默认的...

    通用企业网站系统源码 v3.4 支付宝免签约版.rar

    2.导航菜单管理(前台采用jquery插件实现二级下拉菜单,后台可设置菜单的显示和隐藏) 3.客服功能(可以很方便的为企业和客户之间搭建沟通的桥梁。后台无限制添加QQ,6种样式一键切换) 4.分享功能(采用百度分享接口,...

    通用企业网站管理系统

    2.导航菜单管理(前台采用jquery插件实现二级下拉菜单,后台可设置菜单的显示和隐藏) 3.客服功能(可以很方便的为企业和客户之间搭建沟通的桥梁。后台无限制添加QQ,6种样式一键切换) 4.分享功能(采用百度分享接口,...

Global site tag (gtag.js) - Google Analytics