*
* 只需传递一次数据,会有一个pageNo的参数进行传递
*
* 这种方法在jsp页面上使用很方便,但是在servlet或action里面使用时,要达到减少数据库访问的目的,则需先判断是否执行查询数据库操作,如下使用:
*
* List list = null; if(request.getParameter("pageNo") == null ||
* request.getParameter("pageNo").equals("null")){ list =
* dao.getDataFromDb();//调用自己的方法操作数据库,从数据库里面取出数据 } CutPage cp = new
* CupPage(request,list,20,"");
*
* @param request
* javax.servlet.http.HttpServletRequest对象
* @param allList
* 传进来的所有数据,第一次会放把数据放在session里面,以后在session中取数据
* @param pageSize
* 每页显示的条数
* @param url
* 页面跳转的路径,若没有特殊的参数传递,可以赋成null或"",
* 如是在aciton里面调用,并且action是继承自DispatherAction的话最好传入完整的路径
*/
public void init(HttpServletRequest request, List allList, int pageSize,
String url) {
String page_num = request.getParameter("pageNo");
this.curPageNo = parseInt(page_num, 0);// 当前页码
List list = new ArrayList();
if (allList != null) {
list = allList;
request.getSession().setAttribute("all_List", list);
} else {
list = (List) request.getSession().getAttribute("all_List");
if (list == null) {
list = new ArrayList();
}
}
this.size = list.size();// 总的数据条数
if (url != null) {
this.url = url;
} else {
this.url = request.getRequestURL() + "";
}
if (pageSize > 0)
this.pageSize = pageSize;// 每页显示的条数
setShowList(list);// 设置显示数据
}
/**
* 返回分页导航条
*
* @return pageNavigation String 分页导航条
*/
public String getPageNavigation() {
// 最终返回的分页导航条
String pageNavigation = "共有" + size + "条数据 ";
// 记录数超过一页,需要分页
if (size > pageSize) {
if (url != null && !"".equals(url)) {
if (url.indexOf("?") > -1) {
// 如果url中已经包含了其他的参数,就把curPageNo参数接在后面 url += "&";
} else {
// 如果url中没有别的参数
url += "?";
}
// 生成一个提交页面的函数
pageNavigation += "<script>";
pageNavigation += "function gotoPage(page_num){";
pageNavigation += "location.href='" + url
+ "pageNo='+page_num;";
pageNavigation += "}</script>";
}
pageNavigation += "每页"
+ pageSize
+ "条 "
+ "当前第<select name='pageNo' id='pageNo' onchange='javascript:gotoPage(this.value)'>";
int curPageNos = size % pageSize == 0 ? size / pageSize : size
/ pageSize + 1;
for (int i = 0; i < curPageNos; i++) {
if (i == curPageNo) {
pageNavigation += "<option value='" + i + "' selected>"
+ (i + 1) + "</option>";
} else {
pageNavigation += "<option value='" + i + "'>" + (i + 1)
+ "</option>";
}
}
pageNavigation += "</select>页 共" + curPageNos
+ "页 ";
// 如果不是第一页,导航条将包含"首页"和"上一页"的连接
if (curPageNo > 0) {
pageNavigation += "[<a href=\"javascript:void(0);\" onclick=\"gotoPage(0);return false;\">首页</a>] "
+ "[<a href=\"javascript:void(0);\" onclick=\"gotoPage("
+ (curPageNo - 1) + ");return false;\">上一页</a>] "; } else {
pageNavigation += "[首页] [上一页] ";
}
// 如果不是最后一页,导航条将包含"末页"和"下一页"
if (curPageNo < curPageNos - 1) {
pageNavigation += "[<a href=\"javascript:void(0);\" onclick=\"gotoPage(" + (curPageNo + 1)
+ ");return false;\">下一页</a>] "
+ "[<a href=\"javascript:void(0);\" onclick=\"gotoPage(" + (curPageNos - 1) + ");return false;\">末页</a>]";
} else {
pageNavigation += "[下一页] [末页]";
}
}
return pageNavigation;
}
/**
* 返回分页后的总页数
*
* @return pagecount int 总页数
*/
public int getPageCount() {
int pagecount = 0;
if (size % pageSize == 0) {
pagecount = size / pageSize;
} else {
pagecount = size / pageSize + 1;
}
return pagecount;
}
/**
* 返回最后一页的记录数