一个轻量级的分页框架实例
2011-04-12 10:52
141 查看
以前博客上转载过一个师哥的博客,是关于SSH分页的,关于分页的实现大家都有自己用的最顺手的方法,但是其实分页的思想是相似的。感觉师兄的那个方法太“重”了。其实一个分页的工具没必要再细分成那么多层,这样显得太笨重了。下面推荐一个轻量级的方法,小巧易用,不管是纯粹jsp,还是SSH,均可以使用。废话不再多说上源码:
Pager类(关于分页的实体类):
public class Pager {
private int totalRows; // 总行数
private int pageSize = 15; // 每页显示的行数
private int currentPage; // 当前页号
private int totalPages; // 总页数
private int startRow; // 当前页在数据库中的起始行
public Pager() {
}
public Pager(int _totalRows) {
totalRows = _totalRows;
totalPages = totalRows / pageSize;
int mod = totalRows % pageSize;
if (mod > 0) {
totalPages++;
}
currentPage = 1;
startRow = 0;
}
public int getStartRow() {
return startRow;
}
public int getTotalPages() {
return totalPages;
}
public int getCurrentPage() {
return currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalRows() {
return totalRows;
}
public void first() {
currentPage = 1;
startRow = 0;
}
public void previous() {
if (currentPage == 1) {
return;
}
currentPage--;
startRow = (currentPage - 1) * pageSize;
}
public void next() {
if (currentPage < totalPages) {
currentPage++;
}
startRow = (currentPage - 1) * pageSize;
}
public void last() {
currentPage = totalPages;
startRow = (currentPage - 1) * pageSize;
}
public void refresh(int _currentPage) {
currentPage = _currentPage;
if (currentPage > totalPages) {
last();
}
}
}
PagerService类(掌控分页逻辑的类):
public class PagerService {
public Pager getPager(String currentPage, String pagerMethod, int totalRows) {
// 定义pager对象,用于传到页面
Pager pager = new Pager(totalRows);
// 如果当前页号为空,表示为首次查询该页
// 如果不为空,则刷新pager对象,输入当前页号等信息
if (currentPage != null) {
pager.refresh(Integer.parseInt(currentPage));
}
// 获取当前执行的方法,首页,前一页,后一页,尾页。
if (pagerMethod != null) {
if (pagerMethod.equals("first")) {
pager.first();
} else if (pagerMethod.equals("previous")) {
pager.previous();
} else if (pagerMethod.equals("next")) {
pager.next();
} else if (pagerMethod.equals("last")) {
pager.last();
}
}
return pager;
}
}
业务逻辑中的具体使用方法:
public String pagerMessages() {
// 获得所有的帖子总数
msgNum = messageService.getRows();
// 获得制定方法的pager对象
pager = pagerService.getPager(this.getCurrentPage(), this.getPagerMethod(), msgNum);
// 当前页面
this.setCurrentPage(String.valueOf(pager.getCurrentPage()));
// 总条数
this.setMsgNum(this.getMsgNum());
// 用于分页显示的记录
themeMessages = messageService.getMessages(pager.getPageSize(), pager.getStartRow());
return SUCCESS;
}
怎么样是不是感觉清爽了很多,其实这不是我的思想成果,只是拿别人的知识成果来和大家分享一下!共同进步.....
Pager类(关于分页的实体类):
public class Pager {
private int totalRows; // 总行数
private int pageSize = 15; // 每页显示的行数
private int currentPage; // 当前页号
private int totalPages; // 总页数
private int startRow; // 当前页在数据库中的起始行
public Pager() {
}
public Pager(int _totalRows) {
totalRows = _totalRows;
totalPages = totalRows / pageSize;
int mod = totalRows % pageSize;
if (mod > 0) {
totalPages++;
}
currentPage = 1;
startRow = 0;
}
public int getStartRow() {
return startRow;
}
public int getTotalPages() {
return totalPages;
}
public int getCurrentPage() {
return currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalRows() {
return totalRows;
}
public void first() {
currentPage = 1;
startRow = 0;
}
public void previous() {
if (currentPage == 1) {
return;
}
currentPage--;
startRow = (currentPage - 1) * pageSize;
}
public void next() {
if (currentPage < totalPages) {
currentPage++;
}
startRow = (currentPage - 1) * pageSize;
}
public void last() {
currentPage = totalPages;
startRow = (currentPage - 1) * pageSize;
}
public void refresh(int _currentPage) {
currentPage = _currentPage;
if (currentPage > totalPages) {
last();
}
}
}
PagerService类(掌控分页逻辑的类):
public class PagerService {
public Pager getPager(String currentPage, String pagerMethod, int totalRows) {
// 定义pager对象,用于传到页面
Pager pager = new Pager(totalRows);
// 如果当前页号为空,表示为首次查询该页
// 如果不为空,则刷新pager对象,输入当前页号等信息
if (currentPage != null) {
pager.refresh(Integer.parseInt(currentPage));
}
// 获取当前执行的方法,首页,前一页,后一页,尾页。
if (pagerMethod != null) {
if (pagerMethod.equals("first")) {
pager.first();
} else if (pagerMethod.equals("previous")) {
pager.previous();
} else if (pagerMethod.equals("next")) {
pager.next();
} else if (pagerMethod.equals("last")) {
pager.last();
}
}
return pager;
}
}
业务逻辑中的具体使用方法:
public String pagerMessages() {
// 获得所有的帖子总数
msgNum = messageService.getRows();
// 获得制定方法的pager对象
pager = pagerService.getPager(this.getCurrentPage(), this.getPagerMethod(), msgNum);
// 当前页面
this.setCurrentPage(String.valueOf(pager.getCurrentPage()));
// 总条数
this.setMsgNum(this.getMsgNum());
// 用于分页显示的记录
themeMessages = messageService.getMessages(pager.getPageSize(), pager.getStartRow());
return SUCCESS;
}
怎么样是不是感觉清爽了很多,其实这不是我的思想成果,只是拿别人的知识成果来和大家分享一下!共同进步.....
相关文章推荐
- 一个轻量级的分页框架
- 一个轻量级的JS框架 Liger UI框架
- 多年以前提高asp.net分页查询效率的一个实例
- 介绍一个轻量级iOS安全框架:SSKeyChain
- javascript控件(二):一个好用的表格(分页实例)
- 简单分享一个轻量级自动化测试框架目录结构设计
- C++11实现一个轻量级的AOP框架
- 从0开始写一个基于注解的轻量级分布式RPC框架(4)自定义Spring的IOC,自定义属性注入bean的过程
- 深入浅出学习struts1框架(五)--正式进入struts1框架学习,从一个实例开始
- 一个掌握Struts企业级Web开发框架的实例
- 三大框架学习:Struts2简单入门(通过一个简单的登陆实例详解)
- 一个完整的DataGrid分页及全选删除实例
- 东软学习,基于oracle的一个分页实例
- I2C设备驱动框架和一个实例注册
- 【开源.NET】 分享一个前后端分离的轻量级内容管理框架(第二篇前后端交互数据结构分析)
- 最近学习框架做了一个小网站,基本功能都实现了但是分页没办法用框架思想实现,查了资料找到一个不错的,修改了下分享下
- 使用Nancy和Simple.Data两个轻量级的框架打造一个分布式开发系统(一)
- 【开源.NET】 分享一个前后端分离的轻量级内容管理框架
- python keras (一个超好用的神经网络框架)的使用以及实例
- 通过 Spring + Netty + Protostuff + ZooKeeper 实现了一个轻量级 RPC 框架