`
xlbaby0402
  • 浏览: 27995 次
  • 性别: 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/>
           <!-- 分页 -->

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics