Java中使用sql标签<sql:query />分页显示

记录多时需要分页显示。分页显示需要查找出记录总数,然后根据煤业的记录数计算startRow与maxRow,然后在查找数据,下面使用queryPagination.jsp页面用于显示分页效果Pagination.java用于实现分页功能。代码如下:
queryPagination.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="com.helloweenvsfei.util.Pagination"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
body, td, input, select, button {font-size: 12px; }
table {
    border-collapse: collapse;
    border: 1px solid #000000;
}

td {
    border: 1px solid #000000;
    padding: 2px;
}

.title td {
    text-align: center;
    background: #DDDDDD;
}
</style>
</head>
<body>

<%
    request.setAttribute("pagination", new Pagination(request, response));
%>

<sql:setDataSource driver="com.mysql.jdbc.Driver" user="root"
    password="admin"
    url="jdbc:mysql://localhost:3306/mysql?charachterEncoding=UTF-8"
    var="dataSource" />

<sql:query var="rs" dataSource="${ dataSource }">
    SELECT count(*) count FROM help_topic
</sql:query>

<c:forEach var="row" items="${ rs.rows }">
    <jsp:setProperty name="pagination" property="recordCount"
        value="${ row.count }" />
</c:forEach>

<sql:query var="rs" dataSource="${ dataSource }"
    startRow="${ pagination.firstResult }"
    maxRows="${ pagination.pageSize }">
    SELECT * FROM help_topic
</sql:query>

<table>
    <tr class="title">
        <td>Help_ID</td>
        <td>Name</td>
        <td>Description</td>
    </tr>

    <c:forEach var="row" items="${ rs.rows }">
        <tr>
            <td align="center">${ row['help_topic_id'] }</td>
            <td>${ row['name'] }</td>
            <td>${ row['description'] }</td>
        </tr>
    </c:forEach>

</table>
<br/>
${ pagination }

</body>
</html>

Pagination.java

/*
 * IBM Confidential
 * 
 * OCO Source Materials
 * 
 * #ID# IBM CRL Supply Chain Management Research
 * 
 * (C) Copyright IBM Corp. 2005, 2006
 * 
 * The source code for this program is not published or otherwise divested of
 * its trade secrets.
 * 
 */
package com.helloweenvsfei.util;

import java.net.URLEncoder;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Pagination
{
    private int    pageSize = 20;

    private int    pageNum  = 1;

    private int    recordCount;

    private int    pageCount;

    private int    firstResult;

    private String pageUrl;

    public Pagination(HttpServletRequest request, HttpServletResponse response)
    {
        try
        {
            pageNum = Integer.parseInt(request.getParameter("pageNum"));
        }
        catch (Exception e)
        {
        }

        for (Cookie cookie : request.getCookies())
        {
            if ("pageSize".equals(cookie.getName()))
            {
                try
                {
                    pageSize = Integer.parseInt(cookie.getValue());
                }
                catch (Exception e)
                {
                }
            }
        }

        try
        {
            pageSize = Integer.parseInt(request.getParameter("pageSize"));
        }
        catch (Exception e)
        {
        }

        Cookie cookie = new Cookie("pageSize", Integer.toString(pageSize));
        cookie.setMaxAge(Integer.MAX_VALUE);

        response.addCookie(cookie);

        StringBuffer queryString = new StringBuffer();

        for (Object parameterName : request.getParameterMap().keySet())
        {
            String name = (String) parameterName;

            if ("pageNum".equals(name) || "pageSize".equals(name))
            {
                continue;
            }

            for (String value : request.getParameterValues(name))
            {
                if (queryString.length() > 0)
                {
                    queryString.append("&");
                }

                try
                {
                    queryString.append(name + "="
                            + URLEncoder.encode(value, "UTF-8"));
                }
                catch (Exception e)
                {
                    queryString.append(name + "=" + value);
                }
            }
        }

        pageUrl = request.getRequestURI() + "?" + queryString.toString();
    }

    private void calculate()
    {
        pageCount = (recordCount + pageSize - 1) / pageSize;

        firstResult = (pageNum - 1) * pageSize;
    }

    /**
     * 生成分页信息 包括第一页,上一页,下一页,最后一页等等。
     * 
     * @param pageNum
     *            当前页数
     * @param pageCount
     *            总页数
     * @param recordCount
     *            总记录数
     * @param pageUrl
     *            页面 URL
     * @return
     */
    public String toString()
    {
        calculate();

        String url = pageUrl.contains("?") ? pageUrl : pageUrl + "?";

        StringBuffer buffer = new StringBuffer();

        buffer.append("每页 ");

        buffer
                .append("<select name=ibm_crl_scm_page_size_select onchange='setPageSize(value); ' >");
        buffer.append(" <option value=5"
                + (pageSize == 5 ? " selected " : "") + ">5</option>");
        buffer.append(" <option value=20"
                + (pageSize == 20 ? " selected " : "") + ">20</option>");
        buffer.append(" <option value=40"
                + (pageSize == 40 ? " selected " : "") + ">40</option>");
        buffer.append(" <option value=60"
                + (pageSize == 60 ? " selected " : "") + ">60</option>");
        buffer.append(" <option value=80"
                + (pageSize == 80 ? " selected " : "") + ">80</option>");
        buffer.append(" <option value=100"
                + (pageSize == 100 ? " selected " : "") + ">100</option>");
        buffer.append("</select> 条记录 ");

        buffer.append(" 总记录数: " + recordCount);

        buffer.append(" 页数/总页数: " + pageNum + "/" + pageCount + "  ");

        buffer.append("  ");

        buffer.append(pageCount == 0 || pageNum == 1 ? " 第一页 " : " <a href='"
                + url + "&pageNum=1'>第一页</a> ");

        buffer.append("  &nbsp;  ");

        buffer.append(pageCount == 0 || pageNum == 1 ? " 上一页 " : " <a href='"
                + url + "&pageNum=" + (pageNum - 1) + "'>上一页</a> ");

        buffer.append("  &nbsp;  ");

        buffer.append(pageCount == 0 || pageNum == pageCount ? " 下一页 "
                : " <a href='" + url + "&pageNum=" + (pageNum + 1)
                        + "'>下一页</a> ");

        buffer.append("  &nbsp;  ");

        buffer.append(pageCount == 0 || pageNum == pageCount ? " 最后一页 "
                : " <a href='" + url + "&pageNum=" + pageCount + "'>最后一页</a> ");

        buffer
                .append(" &nbsp;  转到第<input type='text' name='ibm_crl_scm_goto_input' "
                        + " style='width:20px; font-size:12px; text-align:center; '>页 ");

        buffer.append(" <input type='button' "
                + " name='ibm_crl_scm_goto_button' value='Go' class='button'>");

        buffer.append("<script language='javascript'>");
        buffer.append("function helloweenvsfei_enter(){");
        buffer.append(" if(event.keyCode == 13){");
        buffer.append("     helloweenvsfei_goto();");
        buffer.append("     return false;");
        buffer.append(" }");
        buffer.append(" return true;");
        buffer.append("} ");
        buffer.append("function setPageSize(pageSize){");
        buffer.append(" location='" + url + "&pageSize=' + pageSize;");
        buffer.append("} ");
        buffer.append("function helloweenvsfei_goto(){");
        buffer
                .append(" var numText = document.getElementsByName('ibm_crl_scm_goto_input')[0].value;");
        buffer.append(" var num = parseInt(numText, 10);");
        buffer.append(" if(!num){");
        buffer.append("     alert('Input must be a number');   ");
        buffer.append("     return;");
        buffer.append(" }");
        buffer.append(" if(num<1 || num>" + pageCount + "){");
        buffer.append("     alert('Input must between 1 and " + pageCount
                + ". ');    ");
        buffer.append("     return;");
        buffer.append(" }");
        buffer.append(" location='" + url + "&pageNum=' + num;");
        buffer.append("}");
        buffer
                .append("document.getElementsByName('ibm_crl_scm_goto_input')[0].onkeypress = helloweenvsfei_enter;");
        buffer
                .append("document.getElementsByName('ibm_crl_scm_goto_button')[0].onclick = helloweenvsfei_goto;");
        buffer.append("</script>");

        return buffer.toString();

    }

    public int getPageSize()
    {
        calculate();

        return pageSize;
    }

    public void setPageSize(int pageSize)
    {
        calculate();

        this.pageSize = pageSize;
    }

    public int getRecordCount()
    {
        calculate();

        return recordCount;
    }

    public void setRecordCount(int recordCount)
    {
        calculate();

        this.recordCount = recordCount;
    }

    public int getFirstResult()
    {
        calculate();

        return firstResult;
    }

    public void setFirstResult(int firstResult)
    {
        calculate();

        this.firstResult = firstResult;
    }

    public String getPageUrl()
    {
        return pageUrl + "&pageNum=" + pageNum;
    }

    public void setPageUrl(String pageUrl)
    {
        this.pageUrl = pageUrl;
    }

}

// end

程序运行效果如下图所示:
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值