1.DTO
package com.lzh.lms.dto;
import java.util.List;
/**
* @author luozehua
* @date 2014年3月19日
* @time 上午9:20:30
*/
public class PageBean<T> {
/**
* 当前第几页
*/
private Integer pageNo;
/**
* 每页显示记录数
*/
private Integer pageSize;
private Integer totalRecords;
private List<T> datas;
public Integer getPageNo() {
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(Integer totalRecords) {
this.totalRecords = totalRecords;
}
public List<T> getDatas() {
return datas;
}
public void setDatas(List<T> datas) {
this.datas = datas;
}
/**
* 首页
*
* @return
*/
public Integer getFirstPage() {
return 1;
}
/**
* 尾页
*
* @return
*/
public Integer getLastPage() {
return this.getTotalPages();
}
/**
* 上一页
*
* @return
*/
public Integer getPreviousPage() {
if (this.pageNo <= 1) {
return 1;
}
return this.pageNo - 1;
}
/**
* 下一页
*
* @return
*/
public Integer getNextPage() {
if (this.pageNo >= this.getTotalPages()) {
return this.getTotalPages();
}
return this.pageNo + 1;
}
/**
* 总页数
*
* @return
*/
public Integer getTotalPages() {
return (this.totalRecords + this.pageSize - 1) / this.pageSize;
}
}
2.SystemContext
package com.lzh.lms.common;
/**
* @author luozehua
* @date 2014年3月19日
* @time 下午1:53:12
*/
public class SystemContext {
private static ThreadLocal<Integer> pageNoHolder = new ThreadLocal<Integer>();
private static ThreadLocal<Integer> pageSizeHolder = new ThreadLocal<Integer>();
public static Integer getPageNo() {
if(pageNoHolder.get()==null){
pageNoHolder.set(Constants.DEFAULT_PAGE_NO);
}
return pageNoHolder.get();
}
public static void setPageNo(Integer page_no) {
if (page_no == null) {
pageNoHolder.set(Constants.DEFAULT_PAGE_NO);
} else {
pageNoHolder.set(page_no);
}
}
public static Integer getPageSize() {
if(pageSizeHolder.get()==null){
pageSizeHolder.set(Constants.DEFAULT_PAGE_SIZE);
}
return pageSizeHolder.get();
}
public static void setPageSizer(Integer page_size) {
if (page_size == null) {
pageSizeHolder.set(Constants.DEFAULT_PAGE_SIZE);
} else {
pageSizeHolder.set(page_size);
}
}
public static void removePageNo() {
pageNoHolder.remove();
}
public static void removePageSize() {
pageSizeHolder.remove();
}
}
3.Constants(初始常量,默认值)
package com.lzh.lms.common;
public class Constants {
public static final Integer DEFAULT_PAGE_NO = 1;
public static final Integer DEFAULT_PAGE_SIZE = 3;
}
4.DaoSupport俩方法
/**
* 分页
*/
@SuppressWarnings("unchecked")
@Override
public PageBean<T> searchPaginated(String whereHql,final Object[] params) {
final Integer pageNo = SystemContext.getPageNo();
final Integer pageSize = SystemContext.getPageSize();
final StringBuffer hql = new StringBuffer(" from " + clazz.getSimpleName() + " o ");
List<T> datas = Collections.EMPTY_LIST;
PageBean<T> pageBean = new PageBean<T>();
pageBean.setPageNo(pageNo);
pageBean.setPageSize(pageSize);
if (StringUtils.isNotBlank(whereHql)) {
//有查询条件的情况下进行分页查询
hql.append(whereHql);
datas = this.hibernateTemplate.executeFind(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql.toString()).setFirstResult((pageNo - 1) * pageSize).setMaxResults(pageSize);
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
return query.list();
}
});
}else{
datas = this.hibernateTemplate.executeFind(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
//链式编程
return session.createQuery(hql.toString()).setFirstResult((pageNo-1)*pageSize).setMaxResults(pageSize).list();
}
});
}
pageBean.setDatas(datas);
pageBean.setTotalRecords(getTotalRecords(whereHql,params));
return pageBean;
}
/**查询总记录数
* @param whereHql
* @param params
* @return
*/
private Integer getTotalRecords(String whereHql, final Object[] params) {
final StringBuffer hql = new StringBuffer("select count(*) from " + clazz.getSimpleName()+" o ");
Long count = null;
if(StringUtils.isNotBlank(whereHql)){
hql.append(whereHql);
count = (Long) this.hibernateTemplate.execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql.toString());
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
return query.uniqueResult();
}
});
}else{
count = (Long) this.hibernateTemplate.execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
return session.createQuery(hql.toString()).uniqueResult();
}
});
}
return count.intValue();
}
5.Action
// 显示电脑信息并分页
public String listAllComputersAndPages() throws Exception {
PageBean<Computer> pegeBean =this.computerService.searchComputerPaginated(null, null);
ActionContext.getContext().put("pageBean", pegeBean);
return "page_success";
}
6.jsp中
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="8" background="${pageContext.request.contextPath }/images2/tab_12.gif"> </td>
<td><table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="b5d6e6" >
<tr>
<td width="10%" height="22" background="${pageContext.request.contextPath }/images2/bg.gif" bgcolor="#FFFFFF"><div align="center"><span class="STYLE1">计算机编号</span></div></td>
<td width="12%" height="22" background="${pageContext.request.contextPath }/images2/bg.gif" bgcolor="#FFFFFF"><div align="center"><span class="STYLE1">所在机房</span></div></td>
<td width="14%" height="22" background="${pageContext.request.contextPath }/images2/bg.gif" bgcolor="#FFFFFF"><div align="center"><span class="STYLE1">计算机型号</span></div></td>
<td width="18%" background="${pageContext.request.contextPath }/images2/bg.gif" bgcolor="#FFFFFF"><div align="center"><span class="STYLE1">购买时间</span></div></td>
<td width="23%" height="22" background="${pageContext.request.contextPath }/images2/bg.gif" bgcolor="#FFFFFF"><div align="center"><span class="STYLE1">使用状态</span></div></td>
<td width="15%" height="22" background="${pageContext.request.contextPath }/images2/bg.gif" bgcolor="#FFFFFF" class="STYLE1"><div align="center">基本操作</div></td>
</tr>
<c:if test="${empty pageBean.datas}">
<tr>
<td colspan="7"><font color="blue">暂时没有计算机管理数据……</font></td>
</tr>
</c:if>
<c:forEach items="${pageBean.datas}" var="computer">
<tr>
<td height="20" bgcolor="#FFFFFF"><div align="center" class="STYLE1">
<div align="center">${ computer.computerId}</div>
</div></td>
<td height="20" bgcolor="#FFFFFF"><div align="center"><span class="STYLE1">${computer.location }</span></div></td>
<td height="20" bgcolor="#FFFFFF"><div align="center"><span class="STYLE1">${computer.computerType }</span></div></td>
<td bgcolor="#FFFFFF"><div align="center"><span class="STYLE1"><fmt:formatDate value="${computer.buyTime}" pattern="yyyy-MM-dd"/></span></div></td>
<td height="20" bgcolor="#FFFFFF"><div align="center"><span class="STYLE1">${computer.state}</span></div></td>
<td height="20" bgcolor="#FFFFFF"><div align="center">
<span class="STYLE4"><img src="${pageContext.request.contextPath }/images2/edt.gif" width="16" height="16" />
<a href="${pageContext.request.contextPath }/equipment/computer!updateComputerUI?computerId=${computer.id}">编辑</a> <img src="${pageContext.request.contextPath }/images2/del.gif" width="16" height="16" />
<a href="${pageContext.request.contextPath }/equipment/computer!deleteComputer?computerId=${computer.id}">删除</a></span></div></td>
</tr>
</c:forEach>
</table></td>
<td width="8" background="${pageContext.request.contextPath }/images2/tab_15.gif"> </td>
</tr>
</table></td>
</tr>
<tr>
<td height="35" background="${pageContext.request.contextPath }/images2/tab_19.gif"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="12" height="35"><img src="${pageContext.request.contextPath }/images2/tab_18.gif" width="12" height="35" /></td>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="STYLE4"> 共有 ${pageBean.totalRecords } 条记录,当前第 ${pageBean.pageNo}/${pageBean.totalPages } 页</td>
<td><table border="0" align="right" cellpadding="0" cellspacing="0">
<tr>
<!-- 首页 -->
<td width="40"><a href="${pageContext.request.contextPath }/equipment/computer!listAllComputersAndPages?pageNo=${pageBean.firstPage}&pageSize=${pageBean.pageSize}" ><img src="${pageContext.request.contextPath }/images2/first.gif" width="37" height="15" /></a></td>
<!-- 上一页 -->
<td width="45"><a href="${pageContext.request.contextPath }/equipment/computer!listAllComputersAndPages?pageNo=${pageBean.previousPage}&pageSize=${pageBean.pageSize}" ><img src="${pageContext.request.contextPath }/images2/back.gif" width="43" height="15" /></a></td>
<!-- 下一页 -->
<td width="45"><a href="${pageContext.request.contextPath }/equipment/computer!listAllComputersAndPages?pageNo=${pageBean.nextPage}&pageSize=${pageBean.pageSize}" target="Tag"><img src="${pageContext.request.contextPath }/images2/next.gif" width="43" height="15" /></a></td>
<!-- 尾页 -->
<td width="40"><a href="${pageContext.request.contextPath }/equipment/computer!listAllComputersAndPages?pageNo=${pageBean.lastPage}&pageSize=${pageBean.pageSize}"><img src="${pageContext.request.contextPath }/images2/last.gif" width="37" height="15" /></a></td>
<td width="100"><div align="center"><span class="STYLE1">转到第
<input name="textfield" type="text" size="4" style="height:12px; width:20px; border:1px solid #999999;" />
页 </span></div></td>
<td width="40"><img src="${pageContext.request.contextPath }/images2/go.gif" width="37" height="15" /></td>
</tr>
</table></td>
</tr>
</table></td>
<td width="16"><img src="${pageContext.request.contextPath }/images2/tab_20.gif" width="16" height="35" /></td>
</tr>
7.Struts配置文件
<action name="computer" class="computerAction">
<result name="page_success">/jsp/equipment/computer.jsp</result>
<result name="add_success" type="redirectAction">
<param name="actionName">computer</param>
<param name="method">listAllComputersAndPages</param>
</result>
<result name="updateUI">/jsp/equipment/updateComputer.jsp</result>
<result name="update_success" type="redirectAction">
<param name="actionName">computer</param>
<param name="method">listAllComputersAndPages</param>
</result>
<result name="delete_success" type="redirectAction">
<param name="actionName">computer</param>
<param name="method">listAllComputersAndPages</param>
</result>
</action>