`

简单的Freemarker分页插件

阅读更多

原文链接:http://www.hxstrive.com/article/178.htm

 

在日常进行开发中,当数据量太多时,为了提高效率,我们会采用分页的方式展示数据。这样每次检索数据到展示出来的时间将大大缩小。在使用Freemarker的时候我了方便,写了一个简单的分页插件。该插件支持三种皮肤。

 

Freemarker插件内容如下(pageShow.ftl):

<#-- 分页控件-->

<#-- 分页组件的使用 -->

<#--

pageShow 总页数, 当前页, 请求服务地址, 页面大小默认15, 显示最多分页个数, 请求服务地址参数默认为p, 分页样式(可选:gray(默认)、orange、blue)

<#import "pub/pageShow.ftl" as page>

<@page.pageShow pageCount, curPage, "pagePluginTest.do", pageSize, "blue"/>

-->

 

<#macro pageShow _totalPageNum _currentPageNo _pageName _pageSize=15 _styleClassName="gray" _maxShowNums=10 _defaultPageParameter="p" >

    <#-- 本段默认起始页 -->

    <#local _pageStartNo = 1/>

    <#-- 本段默认结束页 -->

    <#local _pageEndNo = _maxShowNums />

    <#-- 分页的第一页 -->

    <#local _firstPageNo = 1 />

    <#-- 分页的最后一页 -->

    <#local _lastPageNo = _totalPageNum>

    <#-- 前一页号码 -->

    <#local _prePageNo = _currentPageNo-1 />

    <#-- 后一页号码 -->

    <#local _nextPageNo = _currentPageNo+1 />

     

    <#if _currentPageNo == _pageStartNo>

        <#local _prePageNo = _pageStartNo />

    </#if>

     

    <#if _currentPageNo == _lastPageNo>

        <#local _nextPageNo = _lastPageNo />

    </#if>

     

    <#if _currentPageNo gt _maxShowNums>

        <#local _thisPageSegment = ((_currentPageNo-1) / _maxShowNums)?int + 1/>

        <#assign _thisPageStartNo = _pageStartNo + (_thisPageSegment-1) * _maxShowNums/>

        <#assign _thisPageEndNo = _pageEndNo + (_thisPageSegment-1) * _maxShowNums/>

        <#if _thisPageEndNo gt _totalPageNum>

            <#assign _thisPageEndNo = _totalPageNum>

        </#if>

    <#else>

        <#assign _thisPageStartNo = _pageStartNo />

        <#assign _thisPageEndNo = _pageEndNo />

    </#if>

     

    <#-- 构造当前分页栏上面的分页按钮 -->

    <#local _pages=[] />

    <#if _totalPageNum != 0>

        <#list _thisPageStartNo .. _thisPageEndNo as _index>

            <#if _currentPageNo == _index >

                <#local _pages = _pages + [{"pageNum" : _index ,"url" : _pageName+"?"+_defaultPageParameter+"="+_index , "current" : true}] />

            <#else>

                <#local _pages = _pages + [{"pageNum" : _index ,"url" : _pageName+"?"+_defaultPageParameter+"="+_index , "current" : false}] />

            </#if>    

        </#list>

    </#if>

     

    <#-- 构造分页栏HTML代码 -->

    <#local _htmlNoLinkLine>

        <a href = "${_pageName}?${_defaultPageParameter}=${_firstPageNo}" target = "_self">首页</a>

        <#if _currentPageNo != _pageStartNo>

            <a href = "${_pageName}?${_defaultPageParameter}=${_prePageNo}" target = "_self">上一页</a>

        </#if>

         

        <#list _pages as page>

            <#if page.current?default(false)>

                <span class="current" >${page.pageNum}</span>

            <#else>

                <a href="${page.url}" mce_href="${page.url}" target="_self">${page.pageNum}</a>

            </#if>

        </#list>

         

        <#if _currentPageNo != _lastPageNo>

            <a href = "${_pageName}?${_defaultPageParameter}=${_nextPageNo}" target = "_self">下一页</a>

        </#if>

        <a href = "${_pageName}?${_defaultPageParameter}=${_lastPageNo}" target = "_self">末页</a>

        <span>共${_totalPageNum?default(0)}页</span>

    </#local>

     

    <!-- 将分页HTML代码放置到页面 -->

    <div class="${_styleClassName}">

        ${_htmlNoLinkLine}

    </div>

     

    <!-- 分页插件CSS -->

    <style type="text/css" mce_bogus="1">

        <#if _styleClassName == "gray">

        <#-- CSS gray style pagination -->

        div.gray {

            font-size: 12px;

            font-family: verdana, arial, helvetica, sans-serif;

            padding: 3px; 

            margin: 3px; 

            text-align: center;

            color:#999999;

        }

        div.gray a {

            border: #E1E2E3 1px solid; 

            padding: 7px 14px; 

            margin: 2px; 

            color: #0000CC; 

            text-decoration: none;

        }

        div.gray a:hover {

            border: #3388FF 1px solid; 

            background: #F2F8FF;

        }

        div.gray a:active {

            color: #FF0000; 

        }

        div.gray span.current {

            border: transparent 1px solid; 

            font-weight: bold; 

            margin: 2px; 

            padding: 7px 14px; 

            color: #333333; 

        }

        </#if>

        <#if _styleClassName == "orange">

        <#-- CSS orange style pagination -->

        div.orange {

            font-size: 12px;

            font-family: verdana, arial, helvetica, sans-serif;

            padding: 3px; 

            margin: 3px; 

            text-align: center;

            color:#999999;

        }

        div.orange a {

            border: #DFDFDF 1px solid; 

            padding: 7px 14px; 

            margin: 2px; 

            color: #3D3D3D; 

            text-decoration: none;

        }

        div.orange a:hover {

            border: #FE4500 1px solid; 

            background: transparent;

            color:#FE4500;

        }

        div.orange a:active {

            color: #FE4500; 

        }

        div.orange span.current {

            border: #FF4400 1px solid; 

            background: #FF4400;

            font-weight: bold; 

            margin: 2px; 

            padding: 7px 14px; 

            color: #FFFFFF; 

        }

        </#if>

        <#if _styleClassName == "blue">

        <#-- CSS blue style pagination -->

        div.blue {

            font-size: 12px;

            font-family: verdana, arial, helvetica, sans-serif;

            padding: 3px; 

            margin: 3px; 

            text-align: center;

            color:#999999;

        }

        div.blue a {

            border: #E1E2E3 1px solid; 

            padding: 7px 14px; 

            margin: 2px; 

            color: #808080; 

            text-decoration: none;

        }

        div.blue a:hover {

            border: #389CFF 1px solid; 

            background: transparent;

            color:#389CFF;

        }

        div.blue a:active {

            color: #389CFF; 

        }

        div.blue span.current {

            border: #389CFF 1px solid; 

            background: #389CFF;

            font-weight: bold; 

            margin: 2px; 

            padding: 7px 14px; 

            color: #FFFFFF; 

        }

        </#if>

    </style>

</#macro>

 

分页插件的使用:

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

<html>

  <head>

    <title>Freemarker分页</title>

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="this is my page">

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

  </head>

  <body>

    <table width="100%" border="1" cellpadding="0" cellspacing="0" style="text-align:center;">  

        <tr style="background:#808080;text-align:center;height:30px;">  

            <td>ID</td>  

            <td>姓名</td>

            <td>性别</td>

            <td>年龄</td>

        </tr>  

        <#list userList as user>  

            <tr height="30px">  

                <td>  

                    <#if user.id?exists> ${user.id} </#if>  

                </td>  

                <td>  

                    <#if user.name?exists> ${user.name} </#if>  

                </td>

                <td>

                    <#if user.sex?exists> ${user.sex} </#if>

                </td>

                <td>

                    <#if user.age?exists> ${user.age} </#if>

                </td>

            </tr>  

        </#list>

         

        <tr height="160px">  

            <td colspan="4" align="center">

                <!--

                pageShow 总页数, 当前页, 请求服务地址, 页面大小默认15, 显示最多分页个数, 请求服务地址参数默认为p, 分页样式(可选:gray(默认)、orange、blue)

                -->

                <#import "pub/pageShow.ftl" as page>

                <@page.pageShow pageCount, curPage, "pagePluginTest.do", pageSize, "gray"/><br/>

                <@page.pageShow pageCount, curPage, "pagePluginTest.do", pageSize, "blue"/><br/>

                <@page.pageShow pageCount, curPage, "pagePluginTest.do", pageSize, "orange"/>

            </td>  

        </tr>  

    </table>  

  </body>

</html>

效果图:


 

 

 

  • 大小: 78.1 KB
分享到:
评论

相关推荐

    Freemarker分页

    Freemarker分页是Web开发中的一个重要概念,它主要用于在大量数据展示时,将结果集分割成多个小块,每次只加载一部分数据,提高页面加载速度并提升用户体验。在这个例子中,我们看到的是如何在使用Struts2框架的基础...

    SSM+websocket+freemarker+mybatis分页插件+多数据源实现

    标题 "SSM+websocket+freemarker+mybatis分页插件+多数据源实现" 涉及到的是一个综合性的Java Web项目,其中包含了多个关键的技术组件。以下是这些技术组件的详细说明: 1. **Spring(SSM中的S)**:Spring是一个...

    jpager-分页demo

    4. **jpager配置与使用**:在视图层,jpager提供了便利的方法来渲染分页链接和导航,开发者需要配置jsp或freemarker等模板文件,以展示分页界面。 5. **事件处理**:当用户点击分页链接时,需要捕获对应的请求,...

    springboot中使用jsp、使用mybatis、使用分页插件

    在SpringBoot框架中,开发人员经常使用JSP(JavaServer Pages)作为视图层,MyBatis作为持久层框架,并且结合PageHelper分页插件来实现高效的分页功能。以下将详细介绍这些知识点。 首先,SpringBoot简化了传统...

    ssm整合freemarker---Demo

    在本Demo中,我们将深入探讨如何将FreeMarker模板引擎整合进SSM框架,以及PageHelper分页插件的使用。 首先,让我们来了解一下SSM框架的核心组件: 1. **Spring**:这是一个全面的Java应用框架,提供依赖注入(DI...

    jquery java struts2 实现分页 非常好看的分页

    总结来说,实现“jQuery Java Struts2 实现分页”涉及到前后端的协同工作:前端使用jQuery和其分页插件处理用户交互,样式通过CSS自定义;后端使用Java和Struts2框架处理分页逻辑,与数据库进行交互,返回所需数据。...

    demo母版(gradle+springboot+freemarker+pagehelper).zip

    **PageHelper** 是一个MyBatis的分页插件,它提供了简单易用的API,使得在MyBatis中实现分页查询变得非常便捷。PageHelper通过拦截器处理SQL,避免了手动编写复杂的分页SQL,同时支持多种数据库,如MySQL、Oracle等...

    ssm整合分页

    为了简化开发,可以使用MyBatis的分页插件,如PageHelper。只需简单配置,即可自动实现分页功能。在Mapper接口方法上添加注解,即可自动完成分页查询,无需手动编写复杂的分页SQL。 **九、优化与性能** 在实际项目...

    SSM框架分页实现

    但实际项目中,我们可能还需要考虑更多的细节,比如分页插件的使用(如MyBatis的PageHelper),以及对查询条件、排序方式等的处理。此外,前端分页样式和交互也需要根据项目需求进行定制。 总结一下,SSM框架下实现...

    ssh实现分页

    在服务层,我们可以通过Spring Data JPA或MyBatis的分页插件来实现数据库查询的分页。例如,使用JPA的Pageable接口,可以指定当前页、每页大小和排序方式,然后由Repository接口的findAll方法返回Page对象,包含了...

    ssh框架的分页功能

    4. 页面展示:在JSP或FreeMarker模板中,遍历分页结果,展示数据并生成分页链接。同时,要根据总页数和当前页调整“上一页”、“下一页”等链接的状态。 五、SSH分页优化 1. 使用缓存:如果数据变动不大,可以考虑...

    ssh分页经典代码

    在实际开发中,我们还可以考虑使用一些现成的分页组件,如MyBatis的PageHelper插件,它可以简化分页的实现,减少代码量,同时提供了一些额外的优化功能。 综上所述,SSH框架下的分页实现涉及到多个层次的协同工作,...

    springmvc+mybatis+分页查询

    - **PageHelper插件**:这通常是一种便捷的分页解决方案,它可以自动处理SQL的分页逻辑,只需在查询时传入页码和每页大小即可。 - **Page对象**:PageHelper返回的分页结果,包含总记录数、总页数以及当前页的数据...

    SpringBoot mybatis druid pagehelper freemarker 整合实例

    PageHelper是MyBatis的分页插件,它实现了对主流数据库的全自动分页。PageHelper通过拦截器方式工作,无需编写任何分页代码,只需在MyBatis的Mapper接口方法中添加分页参数,即可实现高效、便捷的分页效果。 ...

    strust2分页

    5. **使用分页插件**:如果使用分页插件,按照其文档配置Action和视图,通常插件会提供预定义的标签,如`&lt;pagination:page&gt;`,用于自动处理分页。 6. **处理用户交互**:监听用户的分页操作,如点击“下一页”按钮...

    springboot集成mybatis分页,freemark,spring,logback完整小例子

    MyBatis提供了分页插件,例如PageHelper,可以方便地实现分页功能。通过配置和使用这些插件,开发者可以在编写SQL时无需考虑分页逻辑,只需关注查询条件即可。 5. **FreeMarker** FreeMarker是一个模板引擎,用于...

    (三)struts2- 2.3.15.3 spring3.2.4 mybatis-3.2.3 分页 查询

    用户可以自定义拦截器来处理分页逻辑,或者使用现成的分页插件如DisplayTag或Struts2-Plugins的Struts2-Pagination插件。这些插件通常会结合Action中的参数来获取当前页码和每页显示数量,然后与后台服务进行交互,...

    SSH分页源码

    在实际项目中,我们还可以考虑使用一些成熟的分页库,如Spring Data JPA的Pageable接口,或者MyBatis的PageHelper插件,它们提供了更方便的分页支持。同时,优化分页性能也是重要的,例如,通过缓存机制减少不必要的...

    struts2 hibernate spring 整合、分页源码

    1. **配置分页插件**:Struts2有许多分页插件,如DisplayTag或PagingAndSortingResult,可以方便地实现分页展示。需要在Struts2的配置文件中引入这些插件,并设置相应的属性。 2. **编写DAO**:在Hibernate中,你...

    springboot-freemarker:包含框架有:SpringBoot、SpringMVC、MyBaits、Bootstrap3、Druid、Freemarker;有完整的UI、增删改查及分页,防SQL注入、XSS攻击拦截等

    如果切换至sqlite数据库时,则application.properties当中的mybatis分页插件需要改成支持sqlite; 示例启动 启动工程; 运行cn.springboot.Application当中的main方法; 浏览器访问, 测试账号是admin/123456,即可看...

Global site tag (gtag.js) - Google Analytics