ArticlesManager 的分页功能基于 Hibernate 的 分页实现。
主要好处就是移植了,至于效率如何,暂时还没有考虑到,Hibernate推荐的,应该还不错吧!
将含有分页的列表页面作为一个对象,对象中组合了 Articles 这个对象。
该对象还具有返回是否是首页,是否为末页,是否有上页,下页 等方法。
PageNavigation.java 的类的具体代码:
JavaZoo.com © 2006. Code Language:java.
-
package net.hulihutu.pages;
-
-
-
import org.hibernate.HibernateException;
-
import org.hibernate.Query;
-
import org.hibernate.ScrollableResults;
-
-
-
import java.util.List;
-
-
-
/**
-
* Hibernate分页信息
-
*/
-
public
class PageNavigation implements Page {
-
-
-
-
private
int pageSize;
-
private
int pageNumber;
-
-
private
int totalElements = 0;
-
-
-
/**
-
* 构建PageNavigation对象,完成Hibernate的Query数据的分页处理
-
*
-
* @param query Hibernate的Query对象
-
* @param pageNumber 当前页编码,从1开始,如果传的值为Integer.MAX_VALUE表示获取最后一页。
-
* 如果你不知道最后一页编码,传Integer.MAX_VALUE即可。如果当前页超过总页数,也表示最后一页。
-
* 这两种情况将重新更改当前页的页码,为最后一页编码。
-
* @param pageSize 每一页显示的条目数
-
*/
-
public PageNavigation(Query query, int pageNumber, int pageSize){
-
this.pageNumber = pageNumber;
-
this.pageSize = pageSize;
-
try
{
-
ScrollableResults scrollableResults = query.scroll();
-
//get the total elements number
-
scrollableResults.last();
-
this.totalElements = scrollableResults.getRowNumber();
-
if
(
Integer
.
MAX_VALUE ==
this.
pageNumber
-
|| this.pageNumber > getLastPageNumber())//last page
-
{
-
this.pageNumber = getLastPageNumber();
-
}
-
elements = query.setFirstResult(
-
(
this.pageNumber - 1) * this.pageSize).setMaxResults(
-
this.pageSize + 1).list();
-
}
catch
(HibernateException e){
-
-
}
-
}
-
-
public
boolean getIsFirstPage(){
-
return getThisPageNumber() == 1;
-
}
-
-
-
public
boolean getIsLastPage(){
-
return getThisPageNumber() >= getLastPageNumber();
-
}
-
-
-
public
boolean getHasNextPage(){
-
return getLastPageNumber() > getThisPageNumber();
-
}
-
-
-
public
boolean getHasPreviousPage(){
-
return getThisPageNumber() > 1;
-
}
-
-
-
public
int getLastPageNumber(){
-
return totalElements % this.pageSize == 0 ? totalElements
-
/ this.pageSize : totalElements / this.pageSize + 1;
-
}
-
-
-
/**
-
* 返回List类型数据
-
*
-
* @return List数据源
-
*/
-
public
List
getElements
(){
-
return elements;
-
}
-
-
-
public
int getTotalNumberOfElements(){
-
return totalElements;
-
}
-
-
-
public
int getThisPageFirstElementNumber(){
-
return
(getThisPageNumber() - 1) * getPageSize() + 1;
-
}
-
-
-
public
int getThisPageLastElementNumber(){
-
int fullPage = getThisPageFirstElementNumber() + getPageSize() - 1;
-
return getTotalNumberOfElements() < fullPage ? getTotalNumberOfElements()
-
: fullPage;
-
}
-
-
-
public
int getNextPageNumber(){
-
return getThisPageNumber() + 1;
-
}
-
-
-
public
int getPreviousPageNumber(){
-
return getThisPageNumber() - 1;
-
}
-
-
-
public
int getPageSize(){
-
return pageSize;
-
}
-
-
-
public
int getThisPageNumber(){
-
return pageNumber;
-
}
-
}
-
-
Parsed in 0.862 seconds, using GeSHi 1.0.7.12
分页后的文章列表参见附件,右下角为分页连接。
目前Jsp页面中完全不含有 java 类,但是看到很多程序使用的自定义tld来处理分页,打算以后对这部分内容进行重构。
附件4为 articleListAction 。给浏览器返回的是 pageNagivation 类 ^_^
posted on 2006-10-03 21:10
马尔代夫 阅读(132)
评论(0) 编辑 收藏 所属分类:
框架学习 、
Hibernate