这个文件不知道是否对你有用!
在struts中分页的一种实现我的项目中的分页功能
1, 思路使用一个页面控制类,它记录页面信息,如上页,下页,当前页等。在查询的Action中,将这个控制类和查询条件一起传递给数据库访问bean,然后将这两个参数保存在用户session中。在分页控制Action中,利用接收到的分页参数调用数据库访问的bean.
(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());
}
}

解决方案 »

  1.   


    (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
      

  2.   

    这个我看过,但我没太理解。thanks你有他的全部代码码?有请发给我[email protected]
      

  3.   

    bean :EmployeeBase ,Base起什么作用?
      

  4.   

    我的大概思路是:
    自己做一个标签,带入的参数“第几页”、“每页个数”、还有生成特殊sql语句用的“关联关键字”(他其实就是字段名的一个用来生成sql语句用的)……等直接生成一个复杂点的sql语句来实现分页。这个sql语句主要用到not in 子句和特殊的top子句。因为一般分页都是在view这部分,做成标签后直接在jsp中使用,这样用起来更方便多了。好久没有编程了,资料都不没有了,本来可以把源代码贴出来的。
      

  5.   

    http://expert.csdn.net/Expert/topic/2487/2487451.xml?temp=.5214197
    这个帖子里有分页的
    楼主可以参考一下