核心代碼:Page.java,PageUtil.java,Result.java
下載下傳位址為:http://download.csdn.net/detail/clint2002/5371655
具體使用方法:
1、把這三個類放到src下,包名為com.clint.fenye(或其他名字)
2、在需要顯示分頁的那個闆塊的DaoImpl中添加如下方法并在Dao中添加接口(2個,紅色為核心代碼log.debug等為自動生成的,getSession() 可能報錯,原因可能是我們使用Hibernate所寫的方法不同,我繼承的是HibernateDaoSupport接口):
//傳一個Page進去, 如Lxr為資料庫中表名,目的是從資料庫中查詢出所有的
public List findAll(Page page) {
log.debug("finding all Lxr instances");
try {
String queryString = "from Lxr";
Query queryObject = getSession().createQuery(queryString);
queryObject.setFirstResult(page.getBeginIndex());
queryObject.setMaxResults(page.getEveryPage());
return queryObject.list();
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}
//傳回查詢的總條數
public int queryLxrConut() {
log.debug("finding all Lxr instances");
try {
String queryString = "from Lxr";
Query queryObject = getSession().createQuery(queryString);
return queryObject.list().size();
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}
3、在相應serviceImpl中配置,并在service添加相應接口,serviceImpl示例如下:
public class LxrServiceImpl implements LxrService{
private LxrDAO lxrDAO;
public LxrDAO getLxrDAO() {
return lxrDAO;
}
public void setLxrDAO(LxrDAO lxrDAO) {
this.lxrDAO = lxrDAO;
}
public Result findLxrByPage(Page page) {
page = PageUtil.createPage(page, lxrDAO.queryLxrConut());
List<Lxr> lxrs = lxrDAO.findAll(page);
Result result = new Result();
result.setList(lxrs);
result.setPage(page);
return result;
}
4、建立action(名字随便取,不過得--如UserFindAllAction等):
注:引入相關的類和繼承合适的類,我這是直接繼承的ActionSupport,若Base中已繼承相關接口,則繼承Base類。
public class LxrFindAllAction extends ActionSupport {
private LxrService lxrService; //相關的service,
private Integer currentPage; //設定目前頁
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public LxrService getLxrService() {
return lxrService;
}
public void setLxrService(LxrService lxrService) {
this.lxrService = lxrService;
}
public String execute() throws Exception {
Page page = new Page();
page.setEveryPage(10);
if(currentPage == null) {
currentPage = new Integer(1);
}
page.setCurrentPage(currentPage);
Result result = lxrService.findLxrByPage(page);
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("lxrs", result.getList()); //轉到request域中
request.setAttribute("page", result.getPage());
return this.SUCCESS;
}
}
5、在顯示頁面(jsp)中擷取分頁資訊:我這用的是一個表格(根據超連結把參數轉到struts中)
<tr>
<td colspan="11" align="center">
<s:if test="#request.page.hasPrePage">
<a href="lxrFindAll.action?currentPage=1" target="_blank" rel="external nofollow" >首頁</a>
<a href="lxrFindAll.action?currentPage=${request.page.currentPage - 1 }" target="_blank" rel="external nofollow" >上一頁</a>
</s:if>
<s:else>
首頁
上一頁
</s:else>
<s:if test="#request.page.hasNextPage">
<a href="lxrFindAll.action?currentPage=${request.page.currentPage + 1 }" target="_blank" rel="external nofollow" >下一頁</a>
<a href="lxrFindAll.action?currentPage=${request.page.totalPage }" target="_blank" rel="external nofollow" >尾頁</a>
</s:if>
<s:else>
下一頁
尾頁
</s:else>
目前第${page.currentPage}頁,共${page.totalPage}頁,共有${page.totalCount}條記錄。
</td>
</tr>
6、配置struts.xml(具體怎麼轉根據具體情況;如下),
注意:得在spring配置檔案中配置相應的action。
<action name="lxrFindAll" class="lxrFindAllAction">
<result name="success">/form/ShowLxr.jsp</result>
</action>
若有不懂處,請留言,我看到會盡快解決你的問題,此外,我也是菜鳥一個,若有什麼更好的分頁方法,我們可以互相讨論,互相學習--