java自定义分页标签

本文介绍了在Java开发中自定义分页标签的原因和原理,通过创建处理程序类、TLD文件以及使用说明,强调了自定义标签的代码复用和维护优势,帮助提高开发效率。
摘要由CSDN通过智能技术生成

为什么需要自定义标签

在开发项目过程中,我们经常有这样的体会:同一个控件我们可能多处使用,同时我们需要在基础的样式上加上自己的样式和操作的js代码;遇到这种情况,如果每个地方都copy代码的话那么,后期如果要做修改,那么维护的工作量是巨大的。基于这种情况,我们可以考虑使用自定义标签,实现代码的复用,易维护。
JSP自定义标签,实质上就是以标记的形式封装了一个俱有独立功能的Java类。标记的使用减少了直接嵌入JSP页面的Java代码,方便了页面的布局,并且有利于代码的复用,提高了开发的效率。

原理介绍

  1. JSP服务器解析标记的过程:
    当一个用户访问一个JSP页面时,这个请求被发送到JSP服务器,JSP服务器会根据这个请求去调用相应的页面,如果这个页面中有自定义的标记, JSP服务就会根据页面指令<%@ taglib>去访问TLD得到处理程序的相关信息,接着调用该处理程序的构造器方法,启动标记符处理程序,并读取标记符的属性和相应值。
  2. TLD文件
    TLD(TLD:Tag Library Descriptor标记库描述符)文件,标准的XML格式的标记定义文件,被用来存放标记符的信息。
  3. Taglib 指令
    <%@ taglib uri=”URIToTagLibrary” prefix=”tagPrefix” %>
    <% @ taglib %>指令声明此JSP文件使用了自定义的标记,同时引用标记库,也指定了他们的标记的前缀。必须在使用自定义标记之前使用<% @ taglib %>指令。
    属性:
    uri=”URIToTagLibrary” :Uniform Resource Identifier (URI)根据标记的前缀对自定义的标记进行唯一的命名,URI可以是一个相对或绝对的路径。
    prefix=”tagPrefix”:在自定义标记之前的前缀。

举例代码

PageUtil.java代码

package com.util;

import java.util.List;

public class PageUtil<T> {
   
    // 以下4个属性必须指定
    private List<T> records; // 分页数据
    private int totalRecord; // 总记录数
    private int pageNo; // 当前页码,第几页
    private int pageSize; // 每页显示的记录数,每页显示多少条数据

    private int totalPage; // 总页数

    private int startIndex; // 开始索引
    private int endIndex; // 结束索引

    private int indexCount = 10;// 显示的索引数目,如:10的话, 则显示1-10, 2-11

    // public Pagination() {}

    public PageUtil(List<T> records,int totalRecord,int pageNo, int pageSize) {
        this.records = records;
        this.totalRecord = totalRecord;
        this.pageNo = pageNo;
        this.pageSize = pageSize;

        // 根据总记录数和每页显示数计算总页数(totalRecord+pageSize->totalPage)
        totalPage = this.totalRecord / this.pageSize;
        totalPage = (this.totalRecord % pageSize == 0) ? totalPage: (totalPage + 1);
        // 计算显示索引数目
        if (indexCount > totalPage) {
            indexCount = totalPage;
        }
        // 根据索引数目,当前页,总页数计算开始索引和结束索引(indexCount+pageNo+totalPage->startIndex+endIndex)
        startIndex = indexCount / 2;
        startIndex = pageNo- (indexCount % 2 == 0 ? (startIndex - 1) : startIndex);
        endIndex = pageNo + indexCount / 2;
        // 1 <= startIndex < pageNo < endIndex <= totalPage
        // startIndex = pageNo - indexCount/2
        // endIndex = pageNo + indexCount/2
        if (startIndex < 1) {
            startIndex = 1;
            if (totalPage >= indexCount) {
                endIndex = indexCount;
            } else {
                endIndex = totalPage;
            }
        }
        if (endIndex > totalPage) {
            endIndex = totalPage;
            if (endIndex > indexCount) {
                startIndex = endIndex - indexCount + 1;
            } else {
                startIndex = 1;
            }
        }
    }

    /**
     * 获取分页数据
     * 
     * @return
     */
    public List<T> getRecords() {
        return records;
    }

    /**
     * 获取总记录数
     * 
     * @return
     */
    public int getTotalRecord() {
        return totalRecord;
    }

    /**
     * 当前页数(第几页)
     * 
     * @return
     */
    public int getPageNo() {
        return pageNo;
    }

    /**
     * 每页显示数据记录数
     * 
     * @return
     */
    public int getPageSize() {
        return pageSize;
    }

    /**
     * 总页数
     * 
     * @return
     */
    public int getTotalPage() {
        return totalPage;
    }

    /**
     * 起始索引
     * 
     * 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值