SSH 完美實現分頁顯示

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>()
		{
			@Override
			public 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>()
		{
			@Override
			public 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>()
		{
			@Override
			public 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")
	@Override
	public 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")
	@Override
	public List<Card> findAll()
	{
		// TODO Auto-generated method stub
		return (List<Card>)getHibernateTemplate().find("from Card");
	}

}

3、在service中實現分頁顯示,並獲取總頁數

public class ServiceImpl implements Service
{
	public static final int PAGESIZE = 5;
	private CardDao cardDao;

	@Override
	public 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;
		}
	}

	@Override
	public 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;
	}

	@Override
	public 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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章