`
xlbaby0402
  • 浏览: 28629 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Freemarker分页

阅读更多

随笔的一个记录。

有两个参考类,

import java.util.List;

/**
 * 分页显示对象
 * @param <T>
 */
public class PageView<T> {	
	/** 分页数据 **/
	private List<T> records;
	/** 页码开始索引和结束索引 **/
	private PageIndex pageindex;
        /** 总页数 **/
	private long totalpage = 1;
	/** 每页显示记录数 **/
       private int maxresult = 12;
       /** 当前页 **/
      private int currentpage = 1;
      /** 总记录数 **/
      private long totalrecord;
      /** 页码数量 **/
     private int pagecode = 10;

     /** 要获取记录的开始索引 **/
     public int getFirstResult() {
   
      return (this.currentpage-1) * this.maxresult;

	}

	public int getPagecode() {
		return pagecode;
	}

	public void setPagecode(int pagecode) {
		this.pagecode = pagecode;
	}

	public PageView(int maxresult, int currentpage) {
		this.maxresult = maxresult;
		this.currentpage = currentpage;
	}

	public void setQueryResult(QueryResult<T> qr){
             setTotalrecord(qr.getTotal());
		setRecords(qr.getResultList());
	}

	public long getTotalrecord() {
		return totalrecord;
	}


	public void setTotalrecord(long totalrecord) {
		this.totalrecord = totalrecord;
		setTotalpage(this.totalrecord % this.maxresult == 0 ? this.totalrecord / this.maxresult : this.totalrecord / this.maxresult + 1);
	}

	public List<T> getRecords() {
		return records;
	}

	public void setRecords(List<T> records) {
		this.records = records;
	}

	public PageIndex getPageindex() {
		return pageindex;
	}

	public long getTotalpage() {
               return totalpage;
	}

	public void setTotalpage(long totalpage) {
		this.totalpage = totalpage;
		this.pageindex = PageIndex.getPageIndex(pagecode, currentpage, totalpage);
	}


	


	/**
	 *  每页显示记录数
	 * @return
	 */
	public int getMaxresult() {
		return maxresult;
	}

	public int getCurrentpage() {
		return currentpage;
	}


}

 另外一个

/**
 * 算出页码的开始索引和结束索引
 */

public class PageIndex {

    /** 开始索引 */
    private long startindex;

    /** 结束索引 */
    private long endindex;

    public PageIndex(long startindex, long endindex) {
        this.startindex = startindex;
        this.endindex = endindex;
    }

    public long getStartindex() {
        return startindex;
    }

    public void setStartindex(long startindex) {
        this.startindex = startindex;
    }

    public long getEndindex() {
        return endindex;
    }

    public void setEndindex(long endindex) {
        this.endindex = endindex;
    }    


    /**
     * 算出页码的开始索引和结束索引
     * @param viewpagecount 页码数量
     * @param currentPage 当前页数
     * @param totalpage 总页数
     * @return
     */

    public static PageIndex getPageIndex(long viewpagecount, int currentPage, long totalpage){
        long startpage = currentPage - (viewpagecount % 2 == 0 ? viewpagecount / 2 - 1 : viewpagecount / 2);
        long endpage = currentPage + viewpagecount / 2;
        if(startpage < 1){
            startpage = 1;
            if(totalpage >= viewpagecount) endpage = viewpagecount;
            else endpage = totalpage;
        }


        if(endpage > totalpage){
            endpage = totalpage;
            if((endpage - viewpagecount)> 0) startpage = endpage - viewpagecount + 1;
            else startpage = 1;
        }


        return new PageIndex(startpage, endpage);        


    }

  下面是Freemarker的分页宏

<#-- 总页数,当前页 -->
<#macro pagination pageView>  
	<div class="pages">
		<label>共${pageView.totalpage}页,约${pageView.totalrecord}条数据</label>
		<#if pageView.currentpage != 1>
			<a href="javascript:pageinationView(1)" title="首页" class="nav"><span>首页</span></a>
			<a href="javascript:pageinationView(${pageView.currentpage - 1})" title="上一页" class="nav"><span>上一页</span></a>
		<#else>
			<span>首页</span>
			<span>上一页</span>
		</#if>
		
		<#list pageView.pageindex.startindex..pageView.pageindex.endindex as index>
	        <#if pageView.currentpage == index>
	        	<a href="#" class="current">${index}</a>
	        <#else>
	            <a href="javascript:pageinationView(${index})" title="第${index}页" >${index}</a>  
	        </#if>  
	    </#list>  
	    
		<#if pageView.currentpage != pageView.totalpage>
			<a href="javascript:pageinationView(${pageView.currentpage + 1})" title="下一页" class="nav"><span>下一页</span></a>
			<a href="javascript:pageinationView(${pageView.totalpage})" title="未页" class="nav"><span>未页</span></a>
		<#else>
			<span>下一页</span>
			<span>未页</span>
		</#if>
	</div>
	<script type="text/javascript">
		function pageinationView(pageNum) {
			document.getElementById("pageNum").value=pageNum;
			document.getElementById("pageinationForm").submit();
		}
	</script>
</#macro> 
 

页面的引用

<!--分页 -->
            <form id="pageinationForm" method="post" action="clazz-list">
				<input type="hidden" id="pageNum" name="pageNum" value="${pageNum}" />
			</form>
            <#import "*/main/main-page.ftl" as pager>
			<@pager.pagination pageView=pageView/>
           <!-- 分页 -->

 现在应该出来了基本的分页。等后续的工作完成再记录!

分享到:
评论

相关推荐

    FreeMarker通用的分页

    在FreeMarker中实现通用的分页功能是提高Web应用程序性能和用户体验的重要一环。 ### FreeMarker通用分页知识点解析 #### 1. 分页宏(Macro)定义 FreeMarker中的宏允许我们封装可重用的代码块,这在实现通用分页...

    freemarker分页

    总结来说,Freemarker分页涉及后端数据处理、模板渲染和前端交互等多个层面。通过合理的设计和实现,可以在不增加服务器压力的同时,提供用户友好的浏览体验。理解并掌握这一技巧,对于提高Web应用的性能和用户体验...

    FreeMarker分页宏模板freemarker-pagenav.zip

    好用的 freemarker 分页宏模板dom结构比较主流的一个分页一排显示10个分页按钮(想定制的话把页码提取出来做为参数即可)pagenav.previousPage 存着上一页pagenav.totalPage 总页数pagenav.pageNo 当前页面页码page...

    freemarker自定义的通用分页指令(标签)源码和使用示例

    一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx

    freemarker_struts2分页

    本篇文章将深入探讨如何在Struts2框架下结合FreeMarker实现分页功能,帮助开发者更高效地处理大数据量的展示问题。 首先,了解分页的基本原理。分页是用来解决一次性加载大量数据导致页面加载过慢或内存压力过大的...

    freemarker自定义分页标签宏

    在这个主题“freemarker自定义分页标签宏”中,我们将深入探讨如何在FreeMarker中创建自定义的分页标签宏,以便更有效地管理和展示大量数据。 首先,分页是一种常见的网页设计技术,用于将大量数据分割成小块,使...

    freemarker的分页功能

    标题与描述概述的知识点主要集中在Freemarker模板引擎在实现分页功能时的应用,特别是当后端数据库为MySQL的情况下。Freemarker是一个用于生成动态文本的模板引擎,它被广泛应用于Web开发中,用于将数据模型转换成...

    FreeMarker 写的一个分页macro(宏)测试

    在这个"FreeMarker 写的一个分页macro(宏)测试"中,我们可以看到如何使用FreeMarker来实现一个简单的分页功能。下面我们将深入探讨这一主题。 首先,`PaginationUtil.java`可能是实现分页逻辑的工具类。在Java中,...

    freemarker 实现宏分页

    然而,在网上关于FreeMarker如何实现宏分页的教程相对较少。因此,我们来详细探讨一下如何在FreeMarker中使用宏来实现分页功能。 首先,理解FreeMarker宏的概念。在FreeMarker模板语言中,宏类似于HTML中的自定义...

    httpclient,freemarker的静态化分页

    本项目利用了`httpclient`与`freemarker`这两个工具来实现静态化的分页功能。下面将详细阐述这两个工具以及它们在静态化分页中的应用。 首先,`httpclient`是Apache的一个开源HTTP客户端库,它提供了丰富的API,...

    围绕分页的练习(1)(ssh+freemarker)

    标题“围绕分页的练习(1)(ssh+freemarker)”指的是一个关于使用Spring、Struts和Hibernate(SSH)框架以及Freemarker模板引擎进行分页功能实现的编程练习。SSH是一个流行的企业级Java web应用开发框架,而Freemarker...

    Spring,Spring Data Jpa,freemarker,bootstrap实现的分页源代码

    在本项目中,我们主要探讨了如何利用Spring框架、Spring Data JPA、FreeMarker模板引擎以及Bootstrap前端框架来实现一个高效且用户友好的分页功能。以下是对这些技术及其在分页实现中作用的详细解释。 **Spring框架...

    ibatis教程

    8. **Freemarker分页显示** 在Freemarker模板中,可以使用`&lt;#if&gt;`和`&lt;#foreach&gt;`指令来控制分页链接的生成和数据展示。例如,计算页码链接,显示上一页、下一页,以及当前页的记录。同时,还可以创建一个分页导航条...

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

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

    freemarker 自定义freeMarker标签

    例如,你可以创建一个自定义标签用于处理分页数据,接受页码和每页数量作为参数,然后在后台查询数据库并返回相应的页面内容。 此外,FreeMarker还支持自定义函数,它们类似于JavaScript中的函数,可以接收参数并...

    利用freemarker 模板生成pdf ,利用easypoi 生成excel(带图片,水印,分页)

    本主题将探讨如何利用Freemarker模板生成PDF以及如何使用EasyPOI生成带有图片、水印和分页功能的Excel。 首先,让我们深入了解Freemarker。Freemarker是一个强大的模板引擎,它用于生成文本输出,如HTML、XML或PDF...

    iBatis分页(基于Struts2和Freemarker)

    本知识点将深入探讨如何在Struts2框架中结合iBatis实现基于Freemarker模板的分页功能。 首先,我们需要理解iBatis,它是一个轻量级的Java持久层框架,它提供了一个SQL映射框架,允许开发者将SQL语句与Java代码分离...

    通过freemarker模板 生成PDF

    本主题将深入探讨如何利用Freemarker模板和wkhtmltox工具来实现这一功能。 **Freemarker模板** 是一个强大的Java模板引擎,用于动态生成文本输出,如HTML、XML或PDF。它支持变量替换、控制结构(如if/else)和复杂...

    freemarker+struts2仿QQ分页效果

    不过由于小弟资历浅薄,也没心思看,主要是strut2的标签本来我就觉得不大习惯,另外上个月接触了freemarker后,实在是用的爽死了,为什么不用freemarker的macro指令写个通用的分页呢?马上想到模仿TX的...

Global site tag (gtag.js) - Google Analytics