1 分页查询PageBean
1.1 由于我们需要在很多界面上使用分页查询功能,所以我们就需要使用一个通用的类来实现该分页的能力了
1.2 PageBean分析
- 我们需要几个基本的属性来描述该PageBean
- totalCount,总记录数,需要查询得出
- currPage,当前页数,由前台传入,默认为1
- totalPage,总页数由总记录数和分页大小计算得出
- pageSize,分页大小,自由设置,可默认为10
- List list,分页内容实体集合,分页查询后插入
1.3 PageBean代码
/**
* 分页对象
*/
public class PageBean<T>
{
/**
* 总记录数
*/
private Integer totalCount;
/**
* 当前页
*/
private Integer currPage;
/**
* 总页数
*/
private Integer totalPage;
/**
* 每页记录数
*/
private Integer pageSize;
/**
* 分页内容
*/
private List<T> list;
public Integer getCurrPage()
{
return currPage;
}
public void setCurrPage(Integer currPage)
{
// 默认当前页为首页
if(currPage==null) {
currPage=1;
}
this.currPage = currPage;
}
public Integer getTotalCount()
{
return totalCount;
}
public void setTotalCount(Integer totalCount)
{
this.totalCount = totalCount;
}
public Integer getTotalPage()
{
return totalPage;
}
public void setTotalPage(Integer totalPage)
{
this.totalPage = totalPage;
}
public Integer getPageSize()
{
return pageSize;
}
public void setPageSize(Integer pageSize)
{
// 默认每页10条数据
if(pageSize==null) {
pageSize=10;
}
this.pageSize = pageSize;
}
public List<T> getList()
{
return list;
}
public void setList(List<T> list)
{
this.list = list;
}
@Override
public String toString()
{
return "PageBean [totalCount=" + totalCount + ", currPage=" + currPage + ", totalPage=" + totalPage
+ ", pageSize=" + pageSize + ", list=" + list + "]";
}
}
1.4 使用PageBean做分页查询,我这里是用来Hibernate的离线查询DetachedCriteria
public PageBean<Customer> findAll(DetachedCriteria criteria, Integer pageSize, Integer currPage)
{
PageBean<Customer> pageBean=new PageBean<Customer>();
pageBean.setCurrPage(currPage);
pageBean.setPageSize(pageSize);
Integer count=customerDao.findCount(criteria);
pageBean.setTotalCount(count);
// pageBean.setTotlePage(pageBean.getTotleSize()%pageBean.getPageSize()==0?pageBean.getTotleSize()/pageBean.getPageSize():pageBean.getTotleSize()/pageBean.getPageSize()+1);
Double ceil = Math.ceil(1.0*pageBean.getTotalCount()/pageBean.getPageSize());
pageBean.setTotalPage(ceil.intValue());
// 清空查询条件
criteria.setProjection(null);
Integer begin=(pageBean.getCurrPage()-1)*pageBean.getPageSize();
List<Customer> list=customerDao.findByPage(criteria,begin,pageBean.getPageSize());
pageBean.setList(list);
return pageBean;
}
1.5 JSP中使用分页,我这里使用了struts的功能
<SCRIPT language=javascript>
function to_page(page){
if(page){
$("#page").val(page);
}
document.customerForm.submit();
}
</SCRIPT>
<DIV style="LINE-HEIGHT: 20px; HEIGHT: 20px; TEXT-ALIGN: right">
共[<B><s:property value="totalCount"/></B>]条记录,
[<B><s:property value="totalPage"/></B>]页,
每页显示
<select name="pageSize" onchange="to_page()">
<option value="3" <s:if test="pageSize == 3">selected</s:if>>3</option>
<option value="5" <s:if test="pageSize == 5">selected</s:if>>5</option>
<option value="10" <s:if test="pageSize == 10">selected</s:if>>10</option>
</select>
条
<s:if test="currPage != 1">
[<A href="javascript:to_page(1)">首页</A>]
[<A href="javascript:to_page(<s:property value="currPage-1"/>)">前一页</A>]
</s:if>
<B>
<s:iterator var="i" begin="1" end="totalPage">
<s:if test="#i == currPage">
<s:property value="#i"/>
</s:if>
<s:else>
<a href="javascript:to_page(<s:property value="#i"/>)"><s:property value="#i"/></a>
</s:else>
</s:iterator>
</B>
<s:if test="currPage != totalPage">
[<A href="javascript:to_page(<s:property value="currPage+1"/>)">后一页</A>]
[<A href="javascript:to_page(<s:property value="totalPage"/>)">尾页</A>]
</s:if>
到
<input type="text" size="3" id="page" name="currPage" />
页
<input type="button" value="Go" onclick="to_page()"/>
</DIV>