首页 > 其他分享 >freemarker模板分页处理

freemarker模板分页处理

时间:2023-06-01 16:45:25浏览次数:37  
标签:pageNum freemarker pageSize list import com page 模板 分页

借鉴博客:https://www.cnblogs.com/zhouyu629/p/12433259.html

 

 

1、创建一个分页页面:page.html,里面只有分页的内容

<#macro fpage page pagesize totalpages totalrecords url>
    <li><span>共${totalrecords}条记录 &nbsp;&nbsp;第${page}页/共${totalpages}页</span></li>

    <#assign startpage = page,endpage=10,showfirstpage=false,showlastpage=false,showpre=false,shownext=false,prepage = 1,nextpage=11>
    <#--是否显示首页按钮及计算初始页码-->
    <#if page gt 1>
        <#assign showfirstpage = true>
        <#--startpage向前挪4页,如果不足4页,则startpage=1-->
        <#assign startpage=(page-4)>
        <#if startpage lte 0>
        <#assign startpage = 1>
        </#if>
    </#if>
    <#--是否显示前n页的...,以及...的链接-->
    <#if page gt 5>
        <#assign showpre = true,prepage=page-5>
    </#if>
    <#--计算endpage-->
    <#if page+pagesize-1 lt totalpages>
        <#assign endpage = page+pagesize-1>
        <#--显示后面的...按钮-->
        <#assign shownext = true>
        <#--后面...的页面码-->
        <#assign nextpage=page+pagesize>
        <#--显示末页-->
        <#assign showlastpage = true>
        <#else>
        <#assign endpage = totalpages>
    </#if>
    <#if endpage lte 0>
        <#assign endpage = 1>
    </#if>



    <#--开始展示-->

    <#--首页-->
    <#if showfirstpage>
        <li class="page-item"><span><a class="page-link" href="${url}&page=1">首页</a></span></li>
    </#if>
    <#--前面的...-->
    <#if showpre>
        <li class="page-item"><span><a class="page-link" href="${url}&page=${prepage}">...</a></span></li>
    </#if>
    <#--显示的页码按钮-->
    <#list startpage..endpage as p>
        <li  class="page-item <#if p == page>active</#if>"><span><a class="page-link" href="${url}&page=${p}">${p}</a></span></li>
    </#list>
    <#--后面的...-->
    <#if shownext>
        <li class="page-item"><span><a class="page-link" href="${url}&page=${nextpage}">...</a></span></li>
    </#if>
    <#--显示尾页-->
    <#if showlastpage>
        <li class="page-item"><span><a class="page-link" href="${url}&page=${totalpages}">末页</a></span></li>
    </#if>

</#macro>

 

 

2、然后在list页面,就是要分页的模板页面嵌套page.html页面

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
    <title>Hello World!</title>
</head>
<body>



<div style="border: 1px solid darkred">

    <div style="border: 1px solid blue;">
        <h3>自定义分页</h3>

    <!-- 自定义标签areaTag -->
        <@areaTag pageNum='${pageNum}'>
        <ul>

            <#if data.getList()?? &&(data?size>0)>
                <#list data.getList() as item>
                    <li>${item.name}</li>
                </#list>
            </#if>

        </ul>

        <!-- 嵌套分页page.html页面 -->
        <ul>
            <#import "page.html" as fpage />
            <@fpage.fpage page=data.pageNum pagesize=data.pageSize totalpages=data.pages totalrecords=data.total url="freemarkerTest1?key=" />
        </ul>
        </@areaTag>


    </div>



</div>


<!--<script src="/static/jquery/jquery-2.1.4.js"></script>-->
<!--<script src="jquery/jquery-2.1.4.js"></script>-->

<!--<script src="bootstrap/js/bootstrap.js"></script>-->

<!--<script src="jquery/jquery-3.2.0.js"></script>-->

<style>
    
</style>

</body>
</html>

 

 

3、在显示数据的页面中,用了自定义标签areaTag,后台java自定义areaTag代码:freemarker自定义标签写法还要其他配置代码,太多就懒得写出来了,这里只是关键代码,java返回数据的原理都一样,只要返回指定的分页对象数据

package com.jzproject.common.freemarker.directive;

import com.github.pagehelper.PageInfo;
import com.jzproject.common.freemarker.interf.FreemarkerComponent;
import com.jzproject.model.TArea;
import com.jzproject.service.IAreaService;
import freemarker.core.Environment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@FreemarkerComponent("areaTag")
@Component
public class AreaDirective extends BaseDirective {

    @Autowired
    private IAreaService iAreaService;

    @Override
    public Object doExecute(Environment env, Map params) {
        String pageNum = params.get("pageNum") == null ? "1" : params.get("pageNum").toString();
        String pageSize = params.get("pageSize") == null ? "3" : params.get("pageSize").toString();

        List<TArea> list = iAreaService.queryAreaList(430000);

        PageInfo pageInfo = startPage(list, Integer.parseInt(pageNum), Integer.parseInt(pageSize));

        return pageInfo;
    }



    /**
    * descript: 自定义分页
    * @author: zhouruntao
    * @date: 2023-05-31 11:22
    *
    **/
    public <T> PageInfo<T> startPage(List<T> list, Integer pageNum, Integer pageSize) {
        //创建Page类
        com.github.pagehelper.Page page = new com.github.pagehelper.Page(pageNum, pageSize);
        //为Page类中的total属性赋值
        page.setTotal(list.size());
        //计算当前需要显示的数据下标起始值
        int startIndex = (pageNum - 1) * pageSize;
        int endIndex = Math.min(startIndex + pageSize, list.size());
        //从链表中截取需要显示的子链表,并加入到Page
        page.addAll(list.subList(startIndex,endIndex));
        //以Page创建PageInfo
        PageInfo pageInfo = new PageInfo<>(page);
        return pageInfo;
    }



}

 

 

 

4、效果如图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:pageNum,freemarker,pageSize,list,import,com,page,模板,分页
From: https://www.cnblogs.com/spll/p/17449498.html

相关文章

  • 分页打印专题
    一、简单的分页打印实现在main.js中全局引入print.jsprint.js下载//引入print.jsimportprintfrom'@/utils/print.js'Vue.use(print)//注册在打印页面<divref="print"><divclass="no-print">不打印的内容</div><img:src=&quo......
  • Mybatis的五种分页方式详解
     第一种:LIMIT关键字1,mapper代码select*fromtb_userlimit#{pageNo},#{pageSize}2,业务层直接调用publicListfindByPageInfo(PageInfoinfo){returnuserMapper.selectByPageInfo(info);}3,优点灵活性高,可优化空间大mysql分页语句优化4,缺点实现复杂。 第......
  • 使用JPA实现分页和模糊查询
    1、首先创建DAO层接口,实现JpaRepository和JpaSpecificationExecutor两个接口JpaRepository<SysOperLog,Integer> 泛型参数分别是:要查询的实体(Entity),实体的主键类型JpaSpecificationExecutor<SysOperLog> 泛型参数:要查的实体 @RepositorypublicinterfaceSysOperLogReposit......
  • 堆栈算法模板
     动态维护中位数一般都是用双堆解决–同理:动态维护第K大数295.数据流的中位数难度困难800收藏分享切换为英文接收动态反馈中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。例如 arr=[2,3,4] 的中位数是 3 。例如 arr=......
  • Kotlin中的字符串模板
    字符串模板的使用在Kotlin中可以直接在字符串字面值中引用变量,例如:valname="william"valstr="mynameis${name}"println(str)并且Kotlin官方文档建议使用字符串模板来替代字符串连接符的使用,原因在于我们知道String类是immutable的,字符串连接符的实现原理是每次都......
  • 双指针算法模板和一些题目
    什么是同向双指针?什么是相向双指针?双指针的鼻祖题——两数之和TwoSum链表上的快慢指针算法快速排序&归并排序 同向双指针•相向双指针•几乎所有TwoSum变种•Partition•QuickSelect•分成两个部分•分成三个部分•一些你没听过的(但是面试会考的)......
  • C++模板从入门到精通:初阶篇
    一、泛型编程1.1什么是泛型编程?泛型编程是一种编程风格,其中算法以尽可能抽象的方式编写,而不依赖于将在其上执行这些算法的数据形式1。泛型编程可以提高代码的重用性、可维护性和类型安全性。泛型编程的基础是模板,模板是创建泛型类或函数的蓝图或公式。平常写的函数与泛型编程的模板......
  • 模板方法模式
    一、定义定义一个操作中的算法的框架,而将一些步骤延迟到了子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。二、实例来一个经典的脑筋急转弯。把一个大象装进冰箱要几个步骤?然后把一个长颈鹿装进冰箱要几个步骤?三、UML类图  四、钩子函数钩子......
  • vue+docxtemplater,填充word模板
    安装依赖yarnadddocxtemplateryarnaddpizzipyarnaddjszip-utilsyarnaddfile-saver//模板解析插件(支持list循环直接使用$index,使用if判断语法)yarnaddangular-expressionsyarnaddlodash页面测试代码<template> <div> <button@click="bt......
  • tornado 分页读取数据库 实时下载csv
    class downloadHandler(RequestHandler):deffetdata(self,inde):    withMogoContext()asmongo:      res=list(mongo.db['datas'].find().limit(10).skip(inde*10))      fordinres:        yieldddefget(self):  ......