Index.java

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class Index extends TagSupport {
    
    /**
     * 请求的URL
     */
    private String serverUrl;
    /**
     * 当前页开始记录位置
     */
    private String start;
    /**
     * 数据每页个数
     */
    private String pageSize;
    /**
     * 总记录数
     */
    private String total;

    public void setServerUrl(String serverUrl) {
        this.serverUrl = serverUrl;
    }

    public void setStart(String start) {
        this.start = start;
    }

    public void setPageSize(String pageSize) {
        this.pageSize = pageSize;
    }

    public void setTotal(String total) {
        this.total = total;
    }

    @SuppressWarnings("static-access")
    @Override
    public int doStartTag() throws JspException {
        JspWriter out = pageContext.getOut();
        StringBuffer sb = new StringBuffer();

        sb.append("<span>总数:" + total + "</span> &nbsp;&nbsp;");
        sb.append("<a href=" + serverUrl + "&pageSize=" + pageSize + "&start=1>首页</a>");
        sb.append("&nbsp;&nbsp;&nbsp;&nbsp;");
        sb.append("<a href=" + serverUrl + "&pageSize=" + pageSize + "&start=" + getPreviousPageIndex() + ">上一页</a>");
        sb.append("&nbsp;&nbsp;&nbsp;&nbsp;");
        sb.append("<a href=" + serverUrl + "&pageSize=" + pageSize + "&start=" + getNextPageIndex() + ">下一页</a>");
        sb.append("&nbsp;&nbsp;&nbsp;&nbsp;");
        sb.append("<a href=" + serverUrl + "&pageSize=" + pageSize + "&start=" + getPageCount() + ">末页</a>");
        sb.append("&nbsp;&nbsp;&nbsp;&nbsp;");
        sb.append("<span>" + start + " / " + getPageCount() + "</span>");
        
        try {
            out.write(sb.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return super.SKIP_BODY;
    }
    
    private long getPageCount(){
        long count = Long.parseLong(total);
        int size = Integer.parseInt(pageSize);
        long pageCount = count / size;
        if(count % size != 0 || count == 0){
            pageCount++;
        }
        return pageCount;
    }
    
    private long getPreviousPageIndex(){
        long index = Long.parseLong(start);
        index--;
        if(index < 1){
            index = 1;
        }
        return index;
    }
    
    private long getNextPageIndex(){
        long index = Long.parseLong(start);
        long pageCount = getPageCount();
        index++;
        if(index > pageCount){
            index = pageCount;
        }
        return index;
    }
}

tld.xml自定义标签描述文件

--修改tag-class为真实包路径

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE taglib  
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"  
  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>page</short-name>
    <uri>/tags/page</uri>
    <tag>
        <name>index</name>
        <!-- 修改成完整限定名-->
        <tag-class>xxx.Index</tag-class>
        <body-content>JSP</body-content>
        <attribute>
            <name>serverUrl</name>
            <required>true</required>
            <rtexprvalue>false</rtexprvalue>
        </attribute>
        <attribute>
            <name>start</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>pageSize</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>total</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

Jsp调用

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="page" uri="/tags/page"%>
<html>
<body>
    <%
        pageContext.setAttribute("start", 1);
        pageContext.setAttribute("pageSize", 10);
        pageContext.setAttribute("total", 1);
    %>
    <page:index serverUrl="?test=1" pageSize="${pageSize}" total="${total}" start="${start}"></page:index>
</body>
</html>
posted on 2020-02-15 20:58  le.li  阅读(518)  评论(0编辑  收藏  举报