您的位置:首页 > 编程语言 > Java开发

一种struts分页方法

2007-07-27 23:37 337 查看
分页处理的bean类PageableResultSet.java的构造函数参数为一个ResultSet对象,即执行查询语句得到的ResultSet。其具体代码如下:




public class PageableResultSet ... extends ResultSet{




    protected java.sql.ResultSet rs = null;




    protected int rowsCount;




    protected int pageSize;




    protected int curPage;




    protected String command = "";




    public PageableResultSet(java.sql.ResultSet rs)




            throws java.sql.SQLException ...{


        if (rs == null)


            throw new SQLException("given ResultSet is NULL", "user");




        rs.last();//将指针移动到此 ResultSet 对象的最后一行


        rowsCount = rs.getRow();//检索当前行编号


        rs.beforeFirst();//将指针移动到此 ResultSet 对象的开头,正好位于第一行之前




        this.rs = rs;


    }






    /** *//**返回当前页号


    */




    public int getCurPage() ...{


        return curPage;


    }






    /** *//**返回总页数


    */




    public int getPageCount() ...{


        if (rowsCount == 0)


            return 0;


        if (pageSize == 0)


            return 1;


        // calculate PageCount


        double tmpD = (double) rowsCount / pageSize;


        int tmpI = (int) tmpD;


        if (tmpD > tmpI)


            tmpI++;


        return tmpI;


    }






    /** *//**返回当前页的记录条数


    */




    public int getPageRowsCount() ...{


        if (pageSize == 0)


            return rowsCount;


        if (getRowsCount() == 0)


            return 0;


        if (curPage != getPageCount())


            return pageSize;


        return rowsCount - (getPageCount() - 1) * pageSize;




    }






    /** *//**返回分页大小


    */




    public int getPageSize() ...{


        return pageSize;


    }






    /** *//**返回总记录行数


    */




    public int getRowsCount() ...{


        return rowsCount;


    }






    /** *//**转到指定页


    */




    public void gotoPage(int page) ...{


        if (rs == null)


            return;


        if (page < 1)


            page = 1;


        if (page > getPageCount())


            page = getPageCount();


        int row = (page - 1) * pageSize + 1;




        try ...{


            rs.absolute(row);//将指针移动到此 ResultSet 对象的给定行编号


            curPage = page;




        } catch (java.sql.SQLException e) ...{


        }


    }






    /** *//**


    * 转到当前页的第一条记录


    * @exception java.sql.SQLException 异常说明。


    */




    public void pageFirst() throws SQLException ...{


        int row = (curPage - 1) * pageSize + 1;


        rs.absolute(row);


    }






    /** *//**


    * 转到当前页的最后一条记录


    * @exception java.sql.SQLException 异常说明。


    */




    public void pageLast() throws SQLException ...{


        int row = (curPage - 1) * pageSize + getPageRowsCount();


        rs.absolute(row);


    }






    /** *//**设置分页大小


    */




    public void setPageSize(int pageSize) ...{




        if (pageSize >= 0) ...{


            this.pageSize = pageSize;


            curPage = 1;


        }


    }

    public boolean next() throws SQLException {
        // TODO Auto-generated method stub
        return rs.next();
    }


}

分页action类PageAction.java的关键代码如下:




/**//*


 * Generated by MyEclipse Struts


 * Template path: templates/java/JavaClass.vtl


 */


package com.lyt.struts.action;




import javax.servlet.ServletContext;


import javax.servlet.http.HttpServletRequest;


import javax.servlet.http.HttpServletResponse;


import javax.servlet.http.HttpSession;


import javax.sql.DataSource;




import org.apache.struts.action.Action;


import org.apache.struts.action.ActionForm;


import org.apache.struts.action.ActionForward;


import org.apache.struts.action.ActionMapping;




import bean.*;




import common.*;




import java.sql.ResultSet;


import java.sql.SQLException;


import java.util.*;


import dao.ApplicationDAO;






/** *//** 


 * MyEclipse Struts


 * Creation date: 07-14-2007


 * 


 * XDoclet definition:


 * @struts.action validate="true"


 */




public class PageAction extends Action ...{




    /**//*


     * Generated Methods


     */






    /** *//** 


     * Method execute


     * @param mapping


     * @param form


     * @param request


     * @param response


     * @return ActionForward


     */


    public ActionForward execute(ActionMapping mapping, ActionForm form,




            HttpServletRequest request, HttpServletResponse response) ...{


        


        ServletContext context = servlet.getServletContext();


        //从配置文件中得到数据源


        DataSource dataSource = (DataSource) context.getAttribute("db");


        DB db = new DB(dataSource);


                HttpSession session=request.getSession();




        try...{


        request.setCharacterEncoding("gb2312");




        }catch(Exception e)...{


            e.printStackTrace();


        }


        UserBean user=(UserBean)session.getAttribute("usr");




        if(user==null)...{


            return mapping.findForward("invalidSession");


        }


        int staffId=user.getID();


        String sappType=request.getParameter("appType");


        


        


            int appType=Integer.valueOf(sappType).intValue();


            ResultSet rs=ApplicationDAO.getBjsxRS(db, staffId, appType);


        


        int pageNumber=1;




        try ...{


            pageNumber=Integer.parseInt(request.getParameter("pageNumber"));




        } catch (Exception e) ...{


            pageNumber=1;


        }


        PageableResultSet prs=null;




        try...{


        prs=new PageableResultSet(rs);




        }catch(Exception e)...{


            e.printStackTrace();


        }


        prs.setPageSize(10);


          prs.gotoPage(pageNumber);


          


          ArrayList<Application> list =new ArrayList<Application>();




        try ...{




            for(int i=0; i<prs.getPageRowsCount(); i++) ...{


                Application app=new Application();


                


                list.add(app);




                prs.next();


            }




        } catch (SQLException e) ...{


            e.printStackTrace();


        }


        request.setAttribute("totalPage",prs.getPageCount());


        request.setAttribute("currentPage",prs.getCurPage());




        if(list.size()>0)...{


        request.setAttribute("list", list);


        }


        db.close();


        


        return mapping.findForward("page");


    }


}

显示分页的page.jsp代码如下:


<%@ page language="java" pageEncoding="gb2312"


    contentType="text/html;charset=gb2312"%>


<%@ page import="bean.*,common.*"%>




<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>


<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>


<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>


<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested"%>






<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


<html>


    <head>




        <title>主页</title>


        <meta http-equiv="Content-Type" content="text/html; charset=GB2312">




        <style type="text/css">


<!--




.style1 ...{color: #F4F4F4}


-->


</style>


    </head>




    <body>


        <%


        int currentPage = 1, totalPage = 0;


        String sappType=(String)request.getAttribute("appType");




        try ...{


            currentPage = (Integer)request.getAttribute("currentPage");




        } catch (Exception e) ...{}




        try ...{


            totalPage =(Integer)request.getAttribute("totalPage");




        } catch (Exception e) ...{}


        %>




        <table>


            <caption>


            


            </caption>


            <tr>


            


            </tr>


            <logic:present name="list" scope="request">


            <logic:iterate id="shixiang" name="list">


            <tr>


            


            </tr>


            </logic:iterate>


          </logic:present>


        </table>




        <center>


        <p>


            第


            <%=currentPage %>


            页,共


            <%=totalPage %>


            页   


            <a href=/sky_6yt/page.do?pageNumber=1&&appType=<%=sappType %>>首页</a>




            <%if(currentPage<=1)...{%>


            上一页




            <%}else...{%>


            <a href=/sky_6yt/page.do?pageNumber=<%=currentPage-1 %>&&appType=<%=sappType %>>上一页</a>


            <%}%>




            <%if(currentPage==totalPage)...{%>


            下一页




            <%}else...{%>


            <a href=/sky_6yt/page.do?pageNumber=<%=currentPage+1 %>&&appType=<%=sappType %>>下一页</a>


            <%} %>


            <a href=/sky_6yt/page.do?pageNumber=<%=totalPage %>&&appType=<%=sappType %>>末页</a>


        </p>


        </center>


    </body>


</html>



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息