做到一个项目想要用jsp像百度一样显示数字的分页, 如下效果: 
                < <上一页   1   2     4   5   6   7   8   9   10   下一页> > 不显示数字的分页我会,我思考了一下显示数字的分页要用到判断考虑, 
请高手指点一下应怎么写?最好给点代码.谢了!

解决方案 »

  1.   

    如果你已经知道查出来的有多少页了,再相应的分页BEAN里进行判断,应该差不多吧
      

  2.   

    我做出来了一个
    但是当点击数字分页时总跑到第一页
    为什么?请高手指点!
    我的代码如下<%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.sql.*"%>
    <%@ page import="java.io.*"%> 
    <html>
    <title>Jsp分页显示记录</title><body bgcolor="#ffffff"> 
    <% //变量声明 
    Connection sqlCon; //数据库连接对象 
    Statement sqlStmt; //SQL语句对象 
    ResultSet sqlRst; //结果集对象 
    String strSQL; //SQL语句 
    %>
    <%
    int intPageSize; //一页显示的记录数 
    int intRowCount; //记录总数 
    int intPageCount; //总页数 
    int intPage; //待显示页码 
    int CounterStart=0;//每页页码的初始值
    int CounterEnd=0;//显示页码的最大值
    String strPage; 
    %>
    <%
    int i; //设置一页显示的记录数 
    intPageSize = 3; //取得待显示页码 
    strPage = request.getParameter("page"); 
    if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据 
    intPage = 1; 

    else{//将字符串转换成整型 
    intPage = Integer.parseInt(strPage); 
    if(intPage<1) intPage = 1; 

    //装载JDBC驱动程序 
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    String url="jdbc:oracle:thin:@localhost:1521:myoracle";
    //orcl为你的数据库的SID
    String user="system";
    String password="manager";
    sqlCon= DriverManager.getConnection(url,user,password);
    sqlStmt=sqlCon.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    //准备SQL语句 
    strSQL = "select * from fabuxxqy"; 
    //执行SQL语句并获取结果集 
    sqlRst = sqlStmt.executeQuery(strSQL); 
    //获取记录总数 
    sqlRst.last(); 
    intRowCount = sqlRst.getRow(); 
    //记算总页数 
    intPageCount = (intRowCount+intPageSize-1) / intPageSize; 
    //调整待显示的页码 
    if(intPage>intPageCount) intPage = intPageCount; 
    %><%
    //-------------
    //设置显示页码的初始值
    if(intPage % intPageSize == 0){
        CounterStart = intPage - (intPageSize - 1);%>
    <%
    }else{
        CounterStart = intPage - (intPage % intPageSize) + 1;
    }
    CounterEnd = CounterStart + (intPageSize - 1); 
    %> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
    <title>JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - MYSQL</title> 
    </head> 
    <body> 
    <table border="1" cellspacing="0" cellpadding="0"> 
    <tr> 
    <th>ID</th> 
    <th>姓名</th> 
    <th>密码</th> 
     </tr> 
    <% 
    if(intPageCount>0){ 
    //将记录指针定位到待显示页的第一条记录上 
    sqlRst.absolute((intPage-1) * intPageSize + 1); 
    //显示数据 
    i = 0; 
    while(i<intPageSize && !sqlRst.isAfterLast()){ 
    %> 
    <tr> 
    <td><%=sqlRst.getString(1)%></td> 
    <td><%=sqlRst.getString(2)%></td> 
    <td><%=sqlRst.getString(3)%></td> 
     </tr> 
    <% 
    sqlRst.next(); 
    i++; 


    %> 
    </table> 
     第<%=intPage%>页   共<%=intPageCount%>页 <br>
    <!--<a href="2.jsp?page=1">第一页</a>-->
    <%if(intPage>1){%><a href="2.jsp?page=<%=intPage-1%>">上一页</a><%}%> 
    <%/////////////////////////////////
    for(int c=CounterStart;c<=CounterEnd;c++){
                if(c <intPageCount){
                    if(c == intPage){
                        if(c %intPageSize == 0){
                            out.print(c);
                        }else{
                            out.print(c+" ,");
                        }
                    }else if(c % intPageSize == 0){
                        out.print("<a href=2.jsp?Page="+c+">"+c+"</a>");
                    }else{
                        out.print("<a href=2.jsp?Page="+c+">"+c+"</a> ,");
                    }
                }else{
                    if(intPage == intPageCount){
                        out.print(c);
                        break;
                    }else{
                        out.print("<a href=2.jsp?Page="+c+">"+c+"</a>");
                        break;
                    }
                }
           }
    ////////////////////%><%if(intPage<intPageCount){%><a href="2.jsp?page=<%=intPage+1%>">下一页</a><%}%> 
    <!--<a href="2.jsp?page=<%//=intPageCount%>">最后一页</a>-->
    </body> 
    </html> 
    <% 
    //关闭结果集 
    sqlRst.close(); 
    //关闭SQL语句对象 
    sqlStmt.close(); 
    //关闭数据库 
    sqlCon.close(); 
    %>
      

  3.   

    <%@ page language="java" pageEncoding="GB2312"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head>
            <title>仿BAIDU 分页页码显示格式</title>
            <style>
            <!--
                body{
                    .p{
                        PADDING-LEFT: 18px; FONT-SIZE: 14px; WORD-SPACING: 4px
                    }
                }
            -->
            </style>
        </head>    <body>
            <div class="p">
                <%
                    int pagesize = 10;//每页显示记录数
                    int liststep = 20;//最多显示分页页数
                    int pages = 1;//默认显示第一页
                    if (request.getParameter("pages") != null){
                        pages = Integer.parseInt(request.getParameter("pages"));//分页页码变量
                    }
    //取出记录总数,把*换成记录名性能更加
                    //sql="select count(*) from table";
                    int count = 305;//假设取出记录总数
    //求总页数ceil(num)取整不小于num
                    int pagescount = (int) Math.ceil((double) count / pagesize);
                    if (pagescount < pages){
                        pages = pagescount;//如果分页变量大总页数,则将分页变量设计为总页数
                    }
                    if (pages < 1){
                        pages = 1;//如果分页变量小于1,则将分页变量设为1
                    }
    //从第几页开始显示分页信息
                    int listbegin = (pages - (int) Math.ceil((double) liststep / 2));
                    if (listbegin < 1){
                        listbegin = 1;
                    }
                    int listend = pages + liststep/2;//分页信息显示到第几页
                    if (listend > pagescount){
                        listend = pagescount + 1;
                    }                //显示数据部分
                    int recordbegin = (pages - 1) * pagesize;//起始记录
                    int recordend = 0;
                    recordend = recordbegin + pagesize;
                    //最后一页记录显示处理
                    if (pages == pagescount){
                        recordend = (int) (recordbegin + pagesize * (count % pagesize) * 0.1);
                    }
                    //Connection conn = null;//要测试显示数据请自己链接数据库
                    //PreparedStatement stmt = null;
    //取出分页记录,SQL因数据库而异
                    //String strSql = "select * from usertable limit recordbegin,pagesize";!
                    //stmt = conn.prepareStatement(strSql);
                    //ResultSet rs = stmt.executeQuery();
                    //while(rs.next())){
    //显示取出的数据
                    //    response.getWriter().println(""+rs.getString("userId")+"<br>");
                    //}
                    for (int i = recordbegin; i < recordend; i++) {
                        response.getWriter().println("record " + i + "<br>");
                    }                //显示数据部分                //<显示分页信息
                    //<显示上一页
                    if (pages > 1){
                        response.getWriter().println(
                        "<a href=?pages=" + (pages - 1) + ">上一页</a>");
                    }//>显示上一页
                    //<显示分页码
                    for (int i = listbegin; i < listend; i++) ...{
                        if (i != pages) {//如果i不等于当前页
                            response.getWriter().println(
                            "<a href=?pages=" + i + ">[" + i + "]</a>");
                        } else{
                            response.getWriter().println("[" + i + "]");
                        }
                    }//显示分页码>
                    //<显示下一页
                    if (pages != pagescount){
                        response.getWriter().println(
                        "<a href=?pages=" + (pages + 1) + ">下一页</a>");
                    }//>显示下一页
                    //>显示分页信息
                %>
            </div>
        </body>
    </html>
      

  4.   

    请问楼上的 cnku88是如何实现的呢?能否贴出来呢?