分享

在struts中分页的一种实现

 昵称11981 2006-09-19
在struts中分页的一种实现
 
我的项目中的分页功能 
1, 思路 

使用一个页面控制类,它记录页面信息,如上页,下页,当前页等。在查询的Action中,将这个控制类和查询条件一起传递给数据库访问bean,然后将这两个参数保存在用户session中。在分页控制Action中,利用接收到的分页参数调用数据库访问的bean. 


2,实现 

(1)分页控制类 
/* @author nick 
* Created on 2004-3-18 
* file name:PageController.java 


*/ 
package com.tower.util; 

/** 
* @author nick 
* 2004-3-18 
* 用来进行翻页控制 

*/ 
public class PageController { 
int totalRowsAmount; //总行数 
boolean rowsAmountSet; //是否设置过totalRowsAmount 
int pageSize=2; //每页行数 
int currentPage=1; //当前页码 
int nextPage; 
int previousPage; 
int totalPages; //总页数 
boolean hasNext; //是否有下一页 
boolean hasPrevious; //是否有前一页 
String description; 
int pageStartRow; 
int pageEndRow; 

public PageController(int totalRows){ 
setTotalRowsAmount(totalRows); 

public PageController(){} 





/** 
* @param i 
* 设定总行数 
*/ 
public void setTotalRowsAmount(int i) { 
if(!this.rowsAmountSet){ 
totalRowsAmount = i; 
totalPages=totalRowsAmount/pageSize+1; 
setCurrentPage(1); 
this.rowsAmountSet=true; 




/** 
* @param i 

* 当前页 

*/ 
public void setCurrentPage(int i) { 
currentPage = i; 
nextPage=currentPage+1; 
previousPage=currentPage-1; 
//计算当前页开始行和结束行 
if(currentPage*pageSize<totalRowsAmount){ 
pageEndRow=currentPage*pageSize; 
pageStartRow=pageEndRow-pageSize+1; 

}else{ 
pageEndRow=totalRowsAmount; 
pageStartRow=pageSize*(totalPages-1)+1; 



//是否存在前页和后页 

if (nextPage>totalPages){ 
hasNext=false; 
}else{ 
hasNext=true; 

if(previousPage==0){ 
hasPrevious=false; 
}else{ 
hasPrevious=true; 
}; 
System.out.println(this.description()); 


/** 
* @return 
*/ 
public int getCurrentPage() { 
return currentPage; 


/** 
* @return 
*/ 
public boolean isHasNext() { 
return hasNext; 


/** 
* @return 
*/ 
public boolean isHasPrevious() { 
return hasPrevious; 


/** 
* @return 
*/ 
public int getNextPage() { 
return nextPage; 


/** 
* @return 
*/ 
public int getPageSize() { 
return pageSize; 


/** 
* @return 
*/ 
public int getPreviousPage() { 
return previousPage; 


/** 
* @return 
*/ 
public int getTotalPages() { 
return totalPages; 


/** 
* @return 
*/ 
public int getTotalRowsAmount() { 
return totalRowsAmount; 


/** 
* @param b 
*/ 
public void setHasNext(boolean b) { 
hasNext = b; 


/** 
* @param b 
*/ 
public void setHasPrevious(boolean b) { 
hasPrevious = b; 


/** 
* @param i 
*/ 
public void setNextPage(int i) { 
nextPage = i; 


/** 
* @param i 
*/ 
public void setPageSize(int i) { 
pageSize = i; 


/** 
* @param i 
*/ 
public void setPreviousPage(int i) { 
previousPage = i; 


/** 
* @param i 
*/ 
public void setTotalPages(int i) { 
totalPages = i; 

/** 
* @return 
*/ 
public int getPageEndRow() { 
return pageEndRow; 


/** 
* @return 
*/ 
public int getPageStartRow() { 
return pageStartRow; 


public String getDescription(){ 
String description="Total:"+this.getTotalRowsAmount()+ 
" items "+this.getTotalPages() +" pages"; 
// this.currentPage+" Previous "+this.hasPrevious + 
// " Next:"+this.hasNext+ 
// " start row:"+this.pageStartRow+ 
// " end row:"+this.pageEndRow; 
return description; 


public String description(){ 
String description="Total:"+this.getTotalRowsAmount()+ 
" items "+this.getTotalPages() +" pages,Current page:"+ 
this.currentPage+" Previous "+this.hasPrevious + 
" Next:"+this.hasNext+ 
" start row:"+this.pageStartRow+ 
" end row:"+this.pageEndRow; 
return description; 



public static void main(String args[]){ 
PageController pc=new PageController(3); 
System.out.println(pc.getDescription()); 
// pc.setCurrentPage(2); 
// System.out.println(pc.description()); 
// pc.setCurrentPage(3); 
// System.out.println(pc.description()); 





(2)查询Action的代码片断 

public ActionForward execute( 
ActionMapping mapping, 
ActionForm form, 
HttpServletRequest request, 
HttpServletResponse response) 
throws Exception { 
Base queryForm= (Base) form; 

if(!queryForm.getName().equals("")){ 
PageController pc=new PageController(); 
EmployeeBase service=new EmployeeBase(); 
ArrayList result=(ArrayList)service.search(queryForm,pc); 

HttpSession session=request.getSession(); 

session.setAttribute("queryForm",queryForm); 
session.setAttribute("pageController",service.getPageController()); 

request.setAttribute("queryResult",result); 
request.setAttribute("pageController",service.getPageController()); 
return mapping.findForward("haveResult"); 
}else{ 
return mapping.findForward("noResult"); 







(3),翻页Action的代码片断 

public ActionForward execute( 
ActionMapping mapping, 
ActionForm form, 
HttpServletRequest request, 
HttpServletResponse response) 
throws Exception { 


//读取翻页参数 

TurnPageForm turnPageForm=(TurnPageForm)form; 

//从PageController中取出查询信息,并使用bean提供的调用接口处理结果 

HttpSession session=request.getSession(); 
PageController pc=(PageController)session.getAttribute("pageController"); 
Base queryForm=(Base)session.getAttribute("queryForm"); 


pc.setCurrentPage(turnPageForm.getViewPage()); 

EmployeeBase service=new EmployeeBase(); 

ArrayList result=(ArrayList)service.search(queryForm,pc); 

//根据参数将数据写入 request 

request.removeAttribute("queryResult"); 
request.removeAttribute("pageController"); 
request.setAttribute("queryResult",result); 
request.setAttribute("pageController",pc); 

//forward 到显示页面 



return mapping.findForward("haveResult"); 







(4)数据库访问bean中的片断 

public Collection search(Base base, PageController pc) 
throws SQLException { 
ArrayList emps = new ArrayList(); 
ResultSet rs = getSearchResult(base); 

rs.absolute(-1); 
pc.setTotalRowsAmount(rs.getRow()); 
setPageController(pc); 
if (rs.getRow() > 0) { 

rs.absolute(pc.getPageStartRow()); 


do { 
System.out.println("in loop" + rs.getRow()); 

Base b = new Base(); 
b.setName(rs.getString("Name")); 
b.setIdCard(rs.getString("IDCard")); 
System.out.println("From db:" + rs.getString("IDCard")); 
emps.add(b); 
if (!rs.next()) { 
break; 

} while (rs.getRow() < (pc.getPageEndRow() + 1)); 

return emps; 



(5)在jsp中,翻页部分的代码片断 

<bean:write name="pageController" property="description"/> 

<logic:equal name="pageController" property="hasPrevious" value="true"> 
<a href="turnPage.do?viewPage=<bean:write name="pageController" property="previousPage"/>" class="a02"> 
Previous 
</a> 
</logic:equal> 

<logic:equal name="pageController" property="hasNext" value="true"> 
<a href="turnPage.do?viewPage=<bean:write name="pageController" property="nextPage"/>" class="a02"> 
Next 
</a> 
</logic:equal> 



这样一来,翻页的功能可以以你喜欢的方式表现给client 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多