通用分页导航

根据指定当前页,分页记录条数,总页数,总行数,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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值