SpringBoot+beetl 自定义分页标签

做项目用的是springBoot+beetl。有分页功能,在网上找了很多都不行,各种坑。自己写了一套在此记录一下,方便下次查看。

废话少说,直奔主题

1.配置beetl.properties 。pageTag要与前台页面对应,“=”右侧是自己建PageTag的包名和类名

TAG.pageTag=com.shenhua.tag.PageTag

645ab730f17ca8651d9640e19772bc42cbc.jpg

2.写自定义分页标签。  注:查找beetl资料都有init()方法,但是在这里屏蔽之后不受影响。故此屏蔽了。

package com.shenhua.tag;

import org.beetl.core.GeneralVarTagBinding;

import java.io.IOException;

public class PageTag extends GeneralVarTagBinding {

    private int totalpage; //总页数
    private int currentpage; //当前页
    private String pageurl; //路径

//    @Override
//    public void init(Context ctx, Object[] args, Statement st) {
//        super.init(ctx, args, st);
//        Map<String, Integer> pageMap = new HashMap<>();
//        Map<String, Integer> val = null;
//        try {
//            val = (Map<String, Integer>) getAttributeValue("val");
//        } catch (Exception e) {
//        }
//        if (val != null) {
//            pageMap.putAll(val);
//        }
//        if (pageMap.get("totalpage") != null) {
//            totalpage = pageMap.get("totalpage");
//            System.out.println("xxxxxxx=="+totalpage);
//        }
//        if (pageMap.get("currentpage") != null) {
//            currentpage = pageMap.get("currentpage");
//        }
//        System.out.println("xxxxxxx111=="+totalpage);
//        System.out.println("xxxxxxx222=="+currentpage);
//        if (currentpage < 1) currentpage = 1;
//
//
//    }

    @Override
    public void render() {


        pageurl = (String) this.getAttributeValue("pageurl");
        currentpage = Integer.parseInt(this.getAttributeValue("currentpage").toString());
        totalpage = Integer.parseInt(this.getAttributeValue("totalpage").toString());

        StringBuilder jpql = new StringBuilder();

        int next = currentpage + 1;//下一页
        int pre = currentpage - 1;//上一页
        if (pre <= 0) {pre = 1; }
        
        if (totalpage<=next){next= totalpage;}
        //上一页
        jpql.append("<li><a href='").append(pageurl).append(pre).append(".html' >&lt;</a></li>");

        //根据实际情况显示或隐藏
        if (totalpage < 8) {
            for (int i = 1; i <= totalpage; i++) {
                //等于当前页,变色
                if (currentpage == i) {
                    jpql.append("<li><a href='").append(pageurl).append(i).append(".html' class=\"on\" > ").append(i).append("</a></li>");
                } else {
                    jpql.append("<li><a href='").append(pageurl).append(i).append(".html'> ").append(i).append("</a></li>");

                }
            }

        } else {
            int maxNum =currentpage+4;
            int minNum = currentpage - 4;
            if (maxNum > totalpage) {
                maxNum = totalpage;
            }

            if (minNum < 1) {
                minNum = 1;
            }
            for (int i = minNum; i <= maxNum; i++) {

                if (currentpage == i) {
                    jpql.append("<li><a href='").append(pageurl).append(i).append(".html' class=\"on\" > ").append(i).append("</a></li>");
                } else {
                    jpql.append("<li><a href='").append(pageurl).append(i).append(".html' > ").append(i).append("</a></li>");

                }
            }

        }

        jpql.append("<li><a href='").append(pageurl).append(next).append(".html' >&gt;</a></li>");

        try{
            ctx.byteWriter.writeString(jpql.toString());
            this.doBodyRender();
        }catch (IOException e){
        }
    }
}

 

3.html页面  在页面中引用标签。我这里需要传3个参数:currentpage当前页,totalpage总页数 ,pageurl跳转路径。

我这里完整的跳转路径是 http://www.xxx.com/new/0/3.html   第一个数字是新闻分类id,0表示查询全部,不按分类; 第二个数字表示第几页

1651285e6c460dd3380b53387fd9daaeb2d.jpg

 

<ul class="page-u clearfix"  id="pageTag">
<#pageTag currentpage="${page.currentpage}" totalpage="${page.totalpage}" pageurl="/news/${typeid}/"></#pageTag>
</ul>

 

最终效果:

7cf9b6d0a27e65309634e03cf1aa884f8f4.jpg

转载于:https://my.oschina.net/u/1417666/blog/3070498

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值