第二次修改了分页代码,解决了一些小bug,此代码还在测试中,欢迎指出问题。。。
如果你不是使用AJAX分页,请将jsp页面中超链接的js替换成action请求地址即可。
这是ajaxPageInfo.java
这是pageinfo.jsp
如果你不是使用AJAX分页,请将jsp页面中超链接的js替换成action请求地址即可。
这是ajaxPageInfo.java
package com.dwh.common.sys;
import org.apache.struts2.ServletActionContext;
/*
* 分页查找类
*
* 说明,如果要应用于ajax,在数据访问层应该用上如下参数
*
* //分页需要的一些参数
String requestURI="queryPurchaseMuti";//应用请求地址
String queryString="";//参数
Iterator iter = m.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
if(!entry.getKey().equals("cur_arg")){
Object key = entry.getKey();
Object val = entry.getValue();
queryString+="&"+key+"="+val;
}
}
purchase.setPageUrl(requestURI, queryString);
purchase.setPageSize(2);//设置每页显示的数量为2
purchase.setSumRows(8);//查出当前项目为8页
*
*
*/
public class AjaxPageInfo {
/**当前页数*/
private int currentPage;
/**每页显示数量 */
private int pageSize =10;
/**总共有多少页*/
private int sumPages;
/**总记录数*/
private int sumRows;
/**点击下一页的应用地址*/
private String pageUrl;
/**当前开始记录数*/
private int startRow;
/**当前结束记录数*/
private int endRow;
/**前台从第几页开始显示**/
private int beginPage;
/**前台到第几页结束显示**/
private int endPage;
/**前台一次展现几个Page链接**/
private int pageNumber=10;//前台一次展现10个页面链接
/**
* 得到当前页码
* @return
*/
public int getCurrentPage() {
return currentPage;
}
/**
* 设置当前页码
* @param currentPage
*/
public void setCurrentPage(String curPage) {
if(curPage==null||curPage.equals("")){//没有指定当前页的情况下,默认为0,适应第一页
this.currentPage=0;
}else{
currentPage=Integer.parseInt(curPage);
}
this.currentPage = currentPage < 1 ? 0 : currentPage;//当前页通过浏览器参数传过来
this.startRow=currentPage*pageSize; //设置起始记录数,0开始为第一页的内容
this.endRow=startRow+pageSize;
setPageUrl(); //启动获取页数
}
/**
* 得到每页行数
* @return
*/
public int getPageSize() {
return pageSize;
}
/**
* 设置每页行数
* @param rowsPage
*/
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* 得到总页数
* @return
*/
public int getSumPages() {
return sumPages;
}
/**
* 设置总页数
* @param sumPages
*/
public void setSumPages(int sumPages) {
this.sumPages = sumPages;
}
/**
* 得到总行数
* @return
*/
public int getSumRows() {
return sumRows;
}
/**
* 设置总行数
* @param sumRows
*/
public void setSumRows(int sumRows) {
this.sumRows = sumRows;
if(sumRows%pageSize==0){//刚好整除
this.sumPages=sumRows/pageSize;//算出总页数
}
if(sumRows%pageSize>0){//余数为正
this.sumPages=sumRows/pageSize+1;
}
if(sumRows%pageSize<0){//余数为负
this.sumPages=sumRows/pageSize;
}
}
public void setSumRows(int sumRows,int begin,int end) {//设置页面展现链接规则
this.sumRows = sumRows;
if(sumRows%pageSize==0){//刚好整除
this.sumPages=sumRows/pageSize;//算出总页数
}
if(sumRows%pageSize>0){//余数为正
this.sumPages=sumRows/pageSize+1;//(sumRows/pageSize)+1页
}
if(sumRows%pageSize<0){//余数为负
this.sumPages=sumRows/pageSize;
}
this.beginPage=begin;
this.endPage=end;
if(sumPages<pageNumber){//总页数比指定页数还小的时候
this.pageNumber=sumPages;
}
//求得链接集开始页码和结束页码
if(pageNumber<sumPages){
if(currentPage>0){
this.beginPage=(currentPage/pageNumber)*pageNumber;//去除余数的整数*pageNumber
this.endPage=beginPage+pageNumber;
}else{
this.beginPage=1;
this.endPage=pageNumber;
}
}else{
this.beginPage=1;
this.endPage=pageNumber;
}
//点击当前分页末端链接
if((currentPage+1)%pageNumber==0){
if(sumPages>pageNumber){//只有当总页数大于每页显示链接数时开始链接才累加
this.beginPage=currentPage+1;
}else{
this.beginPage=begin;
}
if(sumPages-currentPage>pageNumber){//当前页不是第一个链接集合页
this.endPage=currentPage+11;
}else{
this.endPage=sumPages;
}
}
//点击当前分页最前端链接
if(beginPage==currentPage+1&¤tPage!=0&&(currentPage+1)%pageNumber==0){
if(currentPage+1==begin){
if(currentPage+1!=pageNumber){//如果不为第二个链接页
this.beginPage=(currentPage+1)-pageNumber;
}else{
this.beginPage=(currentPage+2)-pageNumber; //如果要跳到第一页去
}
this.endPage=currentPage+1;
}
}
if(currentPage == sumPages-1){//如果是尾页,算出页面链接的开始和结束
if(sumPages==1){
this.beginPage = 1;
this.endPage =1;
}else{
if(sumPages>pageNumber){
this.beginPage = sumPages - (sumPages % pageSize);//得到,总数减余数
}
this.endPage = sumPages;
}
}
// System.out.println("开始页:"+beginPage);
// System.out.println("结束页:"+endPage);
}
/**
* 设置应用地址
* @return 拼接的应用地址加参数
*/
public String getPageUrl() {
return pageUrl;
}
public void setPageUrl() {
String pageURl = ServletActionContext.getRequest().getRequestURI()+"?a=a";
pageURl +="&"+ServletActionContext.getRequest().getQueryString();
pageURl=pageURl.replaceAll("&curPage="+currentPage,"");//去除页面重复参数
if(pageURl.contains("a=a&")){ //去除页面重复参数
pageURl=pageURl.replaceAll("a=a&", "");
}else{
pageURl=pageURl.replaceAll("a=a", "");
}
this.pageUrl = pageURl;
}
/**setPageUrl()的重载
* @param requestURI js截取的uri
* @param queryString js截取的参数
* */
public void setPageUrl(String requestURI,String queryString) {
String pageURl = requestURI+"?a=a";
pageURl +="&"+queryString;
pageURl=pageURl.replaceAll("&curPage="+currentPage,"");//去除页面重复参数
if(pageURl.contains("a=a&")){ //去除页面重复参数
pageURl=pageURl.replaceAll("a=a&", "");
}else{
pageURl=pageURl.replaceAll("a=a", "");
}
this.pageUrl = pageURl;
}
public int getStartRow() {
return startRow;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public int getEndRow() {
return endRow;
}
public void setEndRow(int endRow) {
this.endRow = endRow;
}
public int getBeginPage() {
return beginPage;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public void setBeginPage(int beginPage) {
if(currentPage==0){//第一次运行分页代码
this.beginPage=1;
}
this.beginPage = beginPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
if(currentPage==0){//第一次运行分页代码
this.endPage=pageNumber;
}
this.endPage = endPage;
}
}
这是pageinfo.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<head>
<style type="text/css">
DIV.scott A.actives {
BORDER-RIGHT: #85bd1e 1px solid; BORDER-TOP: #85bd1e 1px solid; BORDER-LEFT: #85bd1e 1px solid; COLOR: #638425; BORDER-BOTTOM: #85bd1e 1px solid; BACKGROUND-COLOR: #f1ffd6; text-decoration:none;
}
</style>
</head>
<link href="${pageContext.request.contextPath}/lib/common/css/pageInfo.css" type="text/css" rel="stylesheet">
<div class="scott" id="showPage" style="height: 28px;">
<s:if test="currentPage>0">
<a href="javascript:ajaxQuery('${pageUrl}¤tPage=0');">首页</a>|
<a href="javascript:ajaxQuery('${pageUrl}¤tPage=${currentPage-1}');">上一页</a>|
</s:if>
<s:else>首页| 上一页|</s:else>
<!-- 中间分第几页显示 -->
<s:bean name="org.apache.struts2.util.Counter" id="counter">
<s:param name="first" value="beginPage" />
<s:param name="last" value="endPage" />
<s:iterator>
<s:if test="currentPage+1==current-1">
<a class="actives" href="javascript:ajaxQuery('${pageUrl}¤tPage=${current-2}');"><s:property /></a>
</s:if>
<s:else>
<a href="javascript:ajaxQuery('${pageUrl}¤tPage=${current-2}');"><s:property /></a>
</s:else>
</s:iterator>
</s:bean>
<!-- 中间分页结束 -->
<s:if test='currentPage+1 < sumPages'>
<a href="javascript:ajaxQuery('${pageUrl}¤tPage=${currentPage+1}');">下一页</a>|
<a href="javascript:ajaxQuery('${pageUrl}¤tPage=${sumPages-1}');">尾页
</a>
</s:if>
<s:else>下一页| 尾页 </s:else>
共${sumPages}页/共${sumRows}条 第
<input id="load" type="text" size="3" value="" onkeyup="loadUrl(this.value)">
页
<a href="javascript:;" onclick="loadUrl2(document.getElementById('load').value);">确定</a>
</div>
<script type="text/javascript">
//ajax 要加载的请求
function ajaxQuery(url){
url+="&beginPage="+${beginPage}+"&endPage="+${endPage};
$.ajax({
url:url,
type:"get",
cache:false,
success:function(data){//对应ajax处理
var selectFetchType=$('#fetchType').find("option:selected").text();
$('#content').html(data);//向指定显示内容位置写入jsp文件
$('#queryName').html(selectFetchType);
$('#queryName').width(100);
}
});
}
function loadUrl(str) {
//首先判断是否为数字,不为数字提示,输入不可非数字
if (window.event) {//判断事件
var keyCode = window.event.keyCode;
if (keyCode == 13 && str != false) {//回车事件
//首先判断是否为数字,不为数字提示,输入不可非数字
var str = isNumber(str);
if (str == false) {
alert("页数不可以为负数或非数字");
return false;
}
var sumPages = '${sumPages}';
str = parseInt(str);
if (str > sumPages || str < 1) {
alert("没有这个页数 ");
return false;
}//oracle数据库,不用在这里str加1
str = str - 1;//如果是ORACLE数据库,这里不用减1,下标是从1开始的
ajaxQuery('${pageUrl}¤tPage='+str);
}
}
}
function loadUrl2(str) {
//首先判断是否为数字,不为数字提示,输入不可非数字
var str = isNumber(str);
if (str == false) {
alert("页数不可以为负数或非数字");
return false;
}
var sumPages = '${sumPages}';
str = parseInt(str);
if (str > sumPages || str < 1) {
alert("没有这个页数 ");
return false;
}//oracle数据库,不用在这里str加1
str = str-1;
ajaxQuery('${pageUrl}¤tPage='+str);
}
/*调整样式 */
var currentPage = '${currentPage}';
function showCurrent() {
var page = document.getElementById("showPage");
if (currentPage != "") {
var cssPage = page.getElementsByTagName("span");
if (currentPage < cssPage.length) {
cssPage[currentPage].className = "current";
}
}
}
showCurrent();
/*判断是否为数字*/
function isNumber(str) {
var Letters = "1234567890.";
for ( var i = 0; i < str.length; i = i + 1) {
var CheckChar = str.charAt(i);
if (Letters.indexOf(CheckChar) == -1) {
return false;
}
}
return str;
}
</script>