原因:像分页这种功能其实随处可见,虽然现在有了很多的工具类,但是ssm框架或者更早的框架也会有手敲的现象。
废话少说 上干货!!!
一:分页实体类
/**
* 分页实体类
* @category 使用前需按如下顺序设置属性<br/>
* pageBean.setPageNo(page);<br/>
* pageBean.setTotalRecords(count);<br/>
* pageBean.setPerPage(10);<br/>
* @author wgs
*/
public class PageBean {
private int totalRecords; //总记录数
private int totalPages; //总页数
private int perPage; //每页的条数
private int pageNo; //当前页号
private int prevPage; //前页页号
private int nextPage; //后页页号
private boolean hasPrev; //是否有前页
private boolean hasNext; //是否有后页
private String url; //翻页提交的Action地址
/**
* 获取下一页页号
* @return 下一页页号
*/
public int getNextPage() {
return nextPage;
}
/**
* 设置下一页页号
* @param nextPage - 下一页页号
*/
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
/**
* 获取每页的条数
* @return 每页的条数
*/
public int getPerPage() {
return perPage;
}
/**
* 设置每页的条数<br />
* 设置每页的条数时,同时再根据总记录数(totalRecords)自动计算总页数
* @param perPage - 每页的条数
*/
public void setPerPage(int perPage) {
this.perPage = perPage;
if(totalRecords==0)
this.totalPages=0;
else
this.totalPages=(totalRecords-1)/perPage + 1;
}
/**
* 获取当前页号
* @return 前页号
*/
public int getPageNo() {
return pageNo;
}
/**
* 设置当前页号<br/>
* 设置当前页号时,根据总页数自动计算出上一页和下一页的页号。
* @param pageNo - 当前页号
*/
public void setPageNo(int pageNo) {
if(pageNo<1) pageNo=1;
if(pageNo>totalPages) pageNo=totalPages;
this.pageNo = pageNo;
if(pageNo>1){
this.prevPage=pageNo-1;
this.hasPrev=true;
}else{
this.prevPage=1;
this.hasPrev=false;
}
if(pageNo<totalPages){
this.nextPage=pageNo+1;
this.hasNext=true;
}else{
this.nextPage=totalPages;
this.hasNext=false;
}
this.nextPage=pageNo+1;
}
/**
* 获取上一页页号
* @return 上一页页号
*/
public int getPrevPage() {
return prevPage;
}
/**
* 设置上一页页号
* @param prevPage - 上一页页号
*/
public void setPrevPage(int prevPage) {
this.prevPage = prevPage;
}
/**
* 获取总页数
* @return 总页数
*/
public int getTotalPages() {
return totalPages;
}
/**
* 设置总页数
* @param totalPages - 总页数
*/
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
/**
* 获取总记录数
* @return 总记录数
*/
public int getTotalRecords() {
return totalRecords;
}
/**
* 设置总记录数<br/>
* 设置总记录数时,根据总记录数和每页记录数自动计算总页数。
* @param totalRecords - 总记录数
*/
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
if(totalRecords==0)
this.totalPages=0;
else
this.totalPages=(totalRecords-1)/perPage + 1;
}
/**
* 判断是否还有下一页
* @return true-有;false-没有。
*/
public boolean isHasNext() {
return hasNext;
}
/**
* 设置是否还有下一页
* @param hasNext - 是否还有下一页
*/
public void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
}
/**
* 判断是否还有上一页
* @return true-有;false-没有。
*/
public boolean isHasPrev() {
return hasPrev;
}
/**
* 设置是否还有上一页
* @param hasPrev - 是否还有上一页
*/
public void setHasPrev(boolean hasPrev) {
this.hasPrev = hasPrev;
}
/**
* 获取URL地址
* @return URL地址
*/
public String getUrl() {
return url;
}
/**
* 设置URL地址
* @param url - URL地址
*/
public void setUrl(String url) {
this.url = url;
}
}
二:分页的controller
/**
* controller
*
*/
@RequestMapping(value = "test")
public void test(HttpServletRequest request,@RequestParam Integer rows, @RequestParam Integer page){
Integer count =0;
PageBean pageBean = new PageBean();
try{
count = "总条数";
if((rows == null) || (rows.intValue() <= 10)){
rows = Integer.valueOf(10);
}
//设置分页信息
pageBean.setPerPage(rows);
pageBean.setTotalRecords(count);
if (page > pageBean.getTotalPages() && pageBean.getTotalPages() != 0) {
page = pageBean.getTotalPages();
}
pageBean.setPageNo(page);
// 分页开始条数
Integer first = (page - 1) * pageBean.getPerPage();
if (first != 0) {
if (first >= count) {
page--;
pageBean.setPageNo(page);
first = (page-1) * pageBean.getPerPage();
}
}
//获取展示的分页信息
arr = query( first, rows);
model.addAttribute("total", Long.valueOf(count));
}catch(Exception e){
//logger.error("UserController viewUsers Exception:"+e.getMessage());
throw new Exception(e.getMessage());
}
新手看不懂的可以私我讨论,不足之处多多指出!个人纯属当做笔记