1、以下为分页类:

import java.io.Serializable;  
import java.util.List;  
 
import org.apache.commons.lang.builder.ToStringBuilder;  
import org.apache.commons.lang.builder.ToStringStyle;  
 
public class ResultFilter<T> implements Serializable{  
 
    private static final long serialVersionUID = 5472321653620726832L;  
 
    private final static int DEFAULT_NAVIGATOR_SIZE = 5;  
 
    //当前页  
    private int currentPage = 1;  
    //每页显示数量  
    private int pageSize = 5;  
      
    //总条数  
    private int totalCount;  
 
    private boolean havaNextPage;  
 
    private boolean havePrePage;  
 
    private int navigatorSize;  
      
    //存放查询结果用的list  
    private List<T> items;  
      
    public ResultFilter(){  
          
    }  
      
    public ResultFilter(int totalCount, int pageSize, int currentPage) {  
        this(totalCount, pageSize, currentPage, DEFAULT_NAVIGATOR_SIZE);  
    }  
 
    public ResultFilter(int totalCount, int pageSize, int currentPage,  
                        int navigatorSize) {  
        this.totalCount = totalCount;  
        this.pageSize = pageSize;  
        this.currentPage = currentPage;  
        this.navigatorSize = navigatorSize;  
    }  
      
    public int getPageCount() {  
        int pageCount = 0;  
        if (pageSize != 0) {  
            pageCount = totalCount / pageSize;  
            if (totalCount % pageSize != 0)  
                pageCount++;  
        }  
 
        return pageCount;  
    }  
 
    public int getCurrentPage() {  
        currentPage = currentPage < getPageCount() ? currentPage :  
                      getPageCount();  
        currentPage = currentPage < 1 ? 1 : currentPage;  
 
        return currentPage;  
    }  
 
    public int getPageSize() {  
        return pageSize;  
    }  
 
    public int getTotalCount() {  
        return totalCount;  
    }  
 
 
    public boolean isHaveNextPage() {  
        havaNextPage = false;  
        if ((getPageCount() > 1) && (getPageCount() > getCurrentPage()))  
            havaNextPage = true;  
        return havaNextPage;  
    }  
 
    public boolean isHavePrePage() {  
        havePrePage = false;  
        if ((getPageCount() > 1) && (currentPage > 1))  
            havePrePage = true;  
        return havePrePage;  
    }  
 
    private int getNavigatorIndex(boolean isBegin) {  
        int beginNavigatorIndex = getCurrentPage() - navigatorSize / 2;  
        int endNavigatorIndex = getCurrentPage() + navigatorSize / 2;  
        beginNavigatorIndex = beginNavigatorIndex < 1 ? 1 : beginNavigatorIndex;  
        endNavigatorIndex = endNavigatorIndex < getPageCount() ?  
                            endNavigatorIndex :  
                            getPageCount();  
        while ((endNavigatorIndex - beginNavigatorIndex) < navigatorSize &&  
               (beginNavigatorIndex != 1 || endNavigatorIndex != getPageCount())) {  
            if (beginNavigatorIndex > 1)  
                beginNavigatorIndex--;  
            else if (endNavigatorIndex < getPageCount())  
                endNavigatorIndex++;  
        }  
 
        if(isBegin)  
            return beginNavigatorIndex;  
        else  
            return endNavigatorIndex;  
    }  
 
    public int getBeginNavigatorIndex() {  
        return getNavigatorIndex(true);  
    }  
 
    public int getEndNavigatorIndex() {  
        return getNavigatorIndex(false);  
    }  
 
    public List<T> getItems() {  
        return items;  
    }  
 
    public void setItems(List<T> items) {  
        this.items = items;  
    }  
      
    public void setCurrentPage(int currentPage) {  
        this.currentPage = currentPage;  
    }  
 
    public void setPageSize(int pageSize) {  
        this.pageSize = pageSize;  
    }  
 
    public void setTotalCount(int totalCount) {  
        this.totalCount = totalCount;  
    }  
 
    @Override  
    public String toString() {  
        return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);  
    }  
 
}

2、在spring的controller中调用分页类:

@RequestMapping(value="/xxxList")    //xxxList.jsp对应的controller
    public ModelAndView xxxList(@ModelAttribute ResultFilter<xxx> rf){
        systemService.listServiceAll(rf);                                               //调用步骤3 ,分页获取xxx对象
        return new ModelAndView("路径/xxxList", "rf", rf);      //此处跳转到步骤5所表示的网页,并传递分页参数rf,其中“路径/xxxList”

//表示对应的jsp网页,比如myBook/bookList表示myBook目录下的bookList.jsp
    }

3、连操作数据库的service层   获取全部service
    @Transactional(readOnly = false)
    public void listServiceAll(ResultFilter<Services> rf){
        int count=getServiceList().size();
        rf.setTotalCount(count);  
        rf.setItems(serviceDao.getListForPage("from Services", (rf.getCurrentPage() - 1 )* rf.getPageSize(), rf.getPageSize()));

//调用步骤4,分页查询数据库
    }

4、

// -------------- 分页QL Query --------------//
    
    @SuppressWarnings("unchecked")
    public List<T> getListForPage(String hql,int begin,int num){
         Query query = getSession().createQuery(hql);
        
        return query.setFirstResult(begin).setMaxResults(num).list();
        
    }

5、路径/xxxList 对应的jsp网页(注意第四行)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<%@ taglib uri="my-taglib" prefix="my"%>               <!--使用了自定义标签,该标签在步骤6中定义-->

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>XXXList</title>
</head>
<body>

<form>    
        <table id="contentTable" >        
        <tbody>
            <c:url value="/xxxDetail" var="url1"></c:url>
            <c:url value="/xxxList" var="url1"></c:url>    <!--该jsp对应的controller-->
            <tr><c:forEach items="${rf.items}" var="xxx">
                <td valign="top" style="width:229px;oveflow:hidden;">

<table>
                       <tr><td ><a name="click to check the detail" href="${url1}?xxxId=${xxx.id}"><img src="${ctxStatic}/images/123.jpg"></img></a></td></tr>
                     <tr><td >${xxx.attribute1}</td></tr>
                     <tr><td >${xxx.attribute2}</td></tr>
                     </table>
                </td>
                </c:forEach>                                
            </tr>        
        </tbody>
    </table>
    <div style="padding-top:30px;"></div>
    <my:paging curr="${rf.currentPage}" total="${rf.pageCount}" size="${rf.pageSize}" href="${url2}"/>      <!--使用了自定义标签-->
    </form>
</body>
</html>

6、自定义标签‘my’

<?xml version="1.0" encoding="UTF-8"?>  
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"  
        version="2.0">  
 
    <description>My Tag Library</description>  
    <tlib-version>1.0</tlib-version>  
    <short-name>my</short-name>  
    <uri>my-taglib</uri>  
 
    <tag>  
        <description>split page</description>  
        <name>paging</name>  
        <tag-class>aaa.bbb.ccc.PagingTag</tag-class>     <!--用到了步骤7中的PagingTag类 ,aaa.bbb.ccc是PagingTag的路径-->
        <body-content>empty</body-content>  
        <attribute>  
            <description>base href</description>  
            <name>href</name>  
            <required>false</required>  
            <rtexprvalue>true</rtexprvalue>  
        </attribute>  
        <attribute>  
            <description>curr page</description>  
            <name>curr</name>  
            <required>true</required>  
            <rtexprvalue>true</rtexprvalue>  
        </attribute>  
        <attribute>  
            <description>page size</description>  
            <name>size</name>  
            <required>true</required>  
            <rtexprvalue>true</rtexprvalue>  
        </attribute>  
        <attribute>  
            <description>total page</description>  
            <name>total</name>  
            <required>true</required>  
            <rtexprvalue>true</rtexprvalue>  
        </attribute>  
        <attribute>  
            <description>curr parameter name</description>  
            <name>cparam</name>  
            <required>false</required>  
            <rtexprvalue>false</rtexprvalue>  
        </attribute>  
        <attribute>  
            <description>page size parameter name</description>  
            <name>sparam</name>  
            <required>false</required>  
            <rtexprvalue>false</rtexprvalue>  
        </attribute>  
        <dynamic-attributes>false</dynamic-attributes>  
    </tag>  
      
      
      
    <tag>  
        <description>front split page</description>  
        <name>frontPaging</name>  
        <tag-class>com.aspire.cms.demo.framework.tag.FrontPagingTag</tag-class>  
        <body-content>empty</body-content>  
        <attribute>  
            <description>base href</description>  
            <name>href</name>  
            <required>false</required>  
            <rtexprvalue>true</rtexprvalue>  
        </attribute>  
        <attribute>  
            <description>result filter</description>  
            <name>rf</name>  
            <required>true</required>  
            <rtexprvalue>true</rtexprvalue>  
        </attribute>  
        <dynamic-attributes>false</dynamic-attributes>  
    </tag>  
 
</taglib>

7、自定义标签类

package aaa.bbb.ccc;

import java.io.IOException;

import javax.servlet.jsp.JspException;  
import javax.servlet.jsp.JspWriter;  
import javax.servlet.jsp.tagext.SimpleTagSupport;  
 
import org.apache.commons.lang.StringUtils;  
 
public class PagingTag extends SimpleTagSupport {  
      
    private String href;  
      
    //当前页  
    private String cparam;  
    //每页条数  
    private String sparam;  
 
    private int curr;//当前页  
      
    private int size;//每页条数  
      
    private int total;//总页数  
      
    @Override  
    public void doTag() throws JspException, IOException {  
        JspWriter out = getJspContext().getOut();  
          
        if(StringUtils.isEmpty(cparam)) {  
            cparam = "currentPage";  
        }  
        if(StringUtils.isEmpty(sparam)) {  
            sparam = "pageSize";  
        }  
          
        if(!href.endsWith("?") && !href.endsWith("&")) {  
            if(href.indexOf("?") == -1) {  
                href = href + "?";  
            } else {  
                href = href + "&";  
            }  
        }  
          
        if (curr <= 0) {  
            curr = 1;  
        } else if (curr > total) {  
            curr = total;  
        }  
          
        out.append("<span>");  
        // 首页  
        if (curr == 1) {  
            out.append("首页");  
        } else {  
            href(out, href, 1, "首页");  
        }  
        out.append(" | ");  
        // 上一页  
        if (curr == 1) {  
            out.append("上一页");  
        } else {  
            href(out, href, curr - 1, "上一页");  
        }  
        out.append(" | ");  
        // 下一页  
        if (curr == total) {  
            out.append("下一页");  
        } else {  
            href(out, href, curr + 1, "下一页");  
        }  
        out.append(" | ");  
        // 末页  
        if (curr == total) {  
            out.append("末页");  
        } else {  
            href(out, href, total, "末页");  
        }  
        out.append("</span>");  
        out.append("<span>第");  
        out.append(curr + "/" + total);  
        out.append("页</span>");  
          
          
        super.doTag();  
    }  
      
    private void href(JspWriter out, String href, int curr, String title) throws IOException {  
        out.append("<a href=\"").append(href).append(cparam).append("=").append("" + curr).append("&").append(sparam).append("=").append("" + size).append("\">").append(title).append("</a>");  
    }  
 
    public int getCurr() {  
        return curr;  
    }  
 
    public void setCurr(int curr) {  
        this.curr = curr;  
    }  
 
    public int getTotal() {  
        return total;  
    }  
 
    public void setTotal(int total) {  
        this.total = total;  
    }  
 
    public String getHref() {  
        return href;  
    }  
 
    public void setHref(String href) {  
        this.href = href;  
    }  
 
    public String getCparam() {  
        return cparam;  
    }  
 
    public void setCparam(String cparam) {  
        this.cparam = cparam;  
    }  
 
    public String getSparam() {  
        return sparam;  
    }  
 
    public void setSparam(String sparam) {  
        this.sparam = sparam;  
    }  
 
    public int getSize() {  
        return size;  
    }  
 
    public void setSize(int size) {  
        this.size = size;  
    }  
 
}

jsp分页技术的更多相关文章

  1. JSP分页技术的实现(利用当前页进行前后加减,并利用href进行当前页面传值,传值当然是那个当前值变量)

    一.可滚动结果集   Connection con  = DriverManager.getConnection(); PreparedStatement stmt = con.prepareStat ...

  2. 眼下最好的JSP分页技术

     2005-08-24   来源:CSDN  作者:wanchao2001 前言     在使用数据库的过程中,不可避免的须要使用到分页的功能,但是JDBC的规范对此却没有非常好的解决.对于这个需求非 ...

  3. jsp-------------之分页技术(一)

    jsp分页技术之: 如下图:百度的喵 看上图中卡哇伊的小苗的爪子下面的数字,就是分页啦!那我们如何做出这样一个效果呢? 下面我们来逐一分解: jsp分页技术一 :  (算法) /* int pageS ...

  4. JSP的分页技术

    在实际应用中,如果从数据库中查询的记录特别的多,甚至超过了显示屏的显示范围,这个时候可将结果进行分页显示. 假设总记录数为intRowCount,每页显示的数量为inPageSize,总页数为intP ...

  5. Javaweb 第15天 web练习和分页技术

    第15天 web练习和分页技术 复习day14内容: 学习新技术的思路? 分析功能的思路? 使用queryRunner操作数据库的步骤? ResultSetHandler接口常用实现类(三个重点)? ...

  6. Jsp分页的简单制作

    Jsp分页的简单制作 运行环境:jsp+tomcat+eclipse 技术:servlet+jsp+mysql 分页技术还区分两个:假分页和真分页 假分页:一次性从数据库读出表的所有数据一次性的返回给 ...

  7. 改进Spring中的分页技术

    Spring中有一个PagedListHolder,能够实现分页. 但此类有几个缺点: 1. 使用此类的代码比較繁琐 2. 此类存放的数据源是全部的记录集,即对于记录数为1000条的数据,即使我们仅仅 ...

  8. JAVAEE之-----MySQL分页技术(带搜索)

    需求: 为什么须要採用分页技术呢?在数据库中我们查询数据的时候,须要将数据返回到显示页面.数据库中含有大量数据,所有显示在一个页面过于太多,所以我们须要採用分页技术.每一页显示不同数据. 主要解决这个 ...

  9. Mysql学习总结(32)——MySQL分页技术详解

    1.什么是数据分页:数据分页就是将很多条记录像书本一样分页,每页显示多少行记录: 2.为什么要数据分页:当我们进行sql语句查询时,假如数据有成千上万行记录,如果在同一个页面去显示,那这个页面得有多大 ...

随机推荐

  1. PHP多维数组的魅力

    让我们来体验一下多位数组的魅力吧! 多维数组就是一个数组里面包含一个或多个数组,这就是多维数组.下面用多维数组来编写一个小案例(代码在图片下面): <meta http-equiv=" ...

  2. Spring for Apache Kafka

    官方文档详见:http://docs.spring.io/spring-kafka/docs/1.0.2.RELEASE/reference/htmlsingle/ Authors Gary Russ ...

  3. CSS常见问题及兼容性

    CSS常见问题 1 (IE6,7)H5标签兼容 解决方法1:(只显示核心代码) 1<script>  ; ; ;                    ;;;};;;;;;;;       ...

  4. C++话题

    1.多态地实现 A:C++中多态的实现原理是怎样的? Q:通过迟邦定技术(late binding)实现. 具体实现原理如下: 1. 基类中函数带virtual关键字,表示该方法为虚函数. 2. 子类 ...

  5. iOS 正则表达式-判断邮箱、手机号

    判断是否是邮箱 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[ ...

  6. PHP 学习笔记 (四)

    Wordpress 框架中的一些函数: wp_get_nav_menu($default): 根据条件$default 获取menu, 默认获取所有的menu 其中 $default 默认如下所示: ...

  7. 编写类String的构造函数、拷贝构造函数、析构函数和赋值函数

    一.题目: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &othe ...

  8. 将requirejs进行到底(2)

    前一篇:JS模块化工具requirejs教程(一):初识requirejs 我们以非常简单的方式引入了requirejs,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等. 基 ...

  9. 自动化运维工具之ansible

    自动化运维工具之ansible   一,ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...

  10. jcarousellite 实现图片列表滚动

    jcarousel Lite与jcarousel 相比去掉了皮肤的约束,可以自定义的设置前后按钮和选项卡按钮,生成的html更加简洁,文件更小(2k) 下载链接:http://www.gmarwaha ...