SSH 完美实现分页显示

来源:互联网 发布:淘宝情趣用品店排行 编辑:程序博客网 时间:2024/06/10 04:27

1、首先实现一个分页显示的基类

import java.sql.SQLException;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.springframework.orm.hibernate3.HibernateCallback;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;//在hibernateDaoSupport基础上实现了分页public class MyHibernateDaoSupport extends HibernateDaoSupport{public List<?> findByPage(final String hql,final int offset,final int pageSize){List<?> list = getHibernateTemplate().executeFind(new HibernateCallback<Object>(){@Overridepublic Object doInHibernate(org.hibernate.Session session)throws HibernateException, SQLException{List<?> result = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize).list();return result;}});return list;}public List<?> findByPage(final String hql,final Object value,final int offset,final int pageSize){List<?> list = getHibernateTemplate().executeFind(new HibernateCallback<Object>(){@Overridepublic Object doInHibernate(Session session)throws HibernateException, SQLException{List<?> result = session.createQuery(hql).setParameter(0, value).setFirstResult(offset).setMaxResults(pageSize).list();return result;}});return list;}public List<?> findByPage(final String hql,final Object[] values,final int offset,final int pageSize){List<?> list = getHibernateTemplate().executeFind(new HibernateCallback<Object>(){@Overridepublic Object doInHibernate(Session session)throws HibernateException, SQLException{Query query = session.createQuery(hql);for(int i = 0; i < values.length; i++){query.setParameter(i, values[i]);}List<?> result = query.setFirstResult(offset).setMaxResults(pageSize).list();return result;}});return list;}}

2、创建Dao组件,继承1中的基类,并实现分页显示方法

public class CardDaoHibernate extends MyHibernateDaoSupport implements CardDao{@SuppressWarnings("unchecked")@Overridepublic List<Card> findAllByPage(int pageNo, int pageSize){if(pageNo < 1)return null;int offset = (pageNo - 1) * pageSize;return (List<Card>) findByPage("from Card",offset,pageSize);}@SuppressWarnings("unchecked")@Overridepublic List<Card> findAll(){// TODO Auto-generated method stubreturn (List<Card>)getHibernateTemplate().find("from Card");}}

3、在service中实现分页显示,并获取总页数

public class ServiceImpl implements Service{public static final int PAGESIZE = 5;private CardDao cardDao;@Overridepublic int getCardPageCount() throws MyException{try{List<Card> list = cardDao.findAll();int count = list.size();return (count + PAGESIZE - 1) / PAGESIZE;}catch(Exception e){e.printStackTrace();throw new MyException;}}@Overridepublic List<Card> getCardByPage(int pageNo) throws MyException{try{return cardDao.findAllByPage(pageNo, PAGESIZE);}catch(Exception e){e.printStackTrace();throw new MyException;}}

4、分页显示的Action

@SuppressWarnings("serial")public class ShowCardListAction extends ActionSupport{private Service service;private String pageNumber;private int currentPage;private List<Card> cardList;public Service getService(){return service;}public void setService(Service service){this.service = service;}public String getPageNumber(){return pageNumber;}public void setPageNumber(String pageNumber){this.pageNumber = pageNumber;}public int getCurrentPage(){return currentPage;}public void setCurrentPage(int currentPage){this.currentPage = currentPage;}public List<Card> getCardList(){return cardList;}public void setCardList(List<Card> cardList){this.cardList = cardList;}@Overridepublic String execute() throws Exception{ActionContext ctx = ActionContext.getContext();int pageCount = service.getCardPageCount();if(pageCount < 1){ctx.put("tip", "没有记录");return ERROR;}int pageNo;//第一次查看,显示第一页if(getPageNumber() == null || getPageNumber().equals("")){pageNo = 1;}else{pageNo = Integer.parseInt(getPageNumber().trim());}if(pageNo < 1){pageNo = 1;}if(pageNo > pageCount){pageNo = pageCount;}//总页数信息ctx.put("pageCount", pageCount);//当前查看的页号setCurrentPage(pageNo);List<Card> list = service.getCardByPage(pageNo);setCardList(list);return SUCCESS;}

4、分页显示的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" href="/CardManagerSystem/css/style.css" type="text/css"><title>校园卡管理系统</title></head><body><s:set name="page" value="currentPage"></s:set><s:set name="last" value="pageCount"></s:set><div id="body"><div class="content" align="center"><table width="600" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC" class="ss" style="font-size: 16px;text-align: center"> <tr height="30px"><th bgcolor="#F7F7F7">卡号</th><th bgcolor="#F7F7F7">姓名</th></tr><s:iterator value="cardList" status="m"><tr height="30px"><td align="center" bgcolor="#F7F7F7"><s:property value="number"/></td><td align="center" bgcolor="#F7F7F7"><s:property value="name"/></td></tr></s:iterator></table><br><div align="center" style="font-size: 18px">当前页码 <s:property value="currentPage"/>  总页数 ${requestScope.pageCount}  <a href="showCardList.action?pageNumber=1">第一页</a>  <s:if test="#page>1"><a href="showCardList.action?pageNumber=${requestScope.currentPage - 1}">上一页</a>  </s:if><s:if test="#page<#last"><a href="showCardList.action?pageNumber=${requestScope.currentPage + 1}">下一页</a>  </s:if><a href="showCardList.action?pageNumber=${requestScope.pageCount}">最后页</a>  </div></div></div></body></html>