jsp分页标签

在web开发中,分页是大多数页面常见的功能,使用标签来实现,可以减少重复劳动,保持样式统一。好处多多。

首先看下效果图:


这里我们使用了Bootstrap框架中的样式,在后台代码中,你可以将其更换成其他样式。


分页标签的后台代码如下:


package com.lemon.util;

import java.io.IOException;
import java.text.MessageFormat;

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

/**
 * 分页标签
 *
 */
public class PageTag extends TagSupport {
    /**
	 * 
	 */
	private static final long serialVersionUID = -6270647848746404911L;
	private String url; //链接地址
    private int curPage;// 当前页
    private int pageSize; // 页大小
    private int totalCount; // 总记录条数

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUrl() {
        return url;
    }
    
    public int getCurPage() {
		return curPage;
	}

	public void setCurPage(int curPage) {
		this.curPage = curPage;
	}

	public int getPageSize() {
		return pageSize;
	}

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

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	/**
     * 计算总页数
     * @return
     */
    private int totalPages(){
        return totalCount % pageSize == 0 ? totalCount / pageSize
                : totalCount / pageSize + 1;
    }

    @Override
    public int doStartTag() throws JspException {
        JspWriter out = this.pageContext.getOut();
        try {
        	int totalPageNum=this.totalPages();
        	StringBuffer liStr=new StringBuffer();
        	for(int i=1;i<=totalPageNum;i++){
        		String hrefStr=url+"?params.curPage="+i+"¶ms.pageSize="+pageSize;
        		if(curPage==i){
        			liStr.append("<li class='active'><a  href=").append(hrefStr).append(">").append(i).append("</a>");
        		}else{
        			liStr.append("<li><a href=").append(hrefStr).append(">").append(i).append("</a>");
        		}
        	}
        	
        	String firstPageStr=url+"?params.curPage=1¶ms.pageSize="+pageSize;
        	String lastPageStr=url+"?params.curPage="+totalPageNum+"¶ms.pageSize="+pageSize;
        	String link = "<ul class='pagination pagination'> <li><a href="+firstPageStr+">«</a></li>";
        	link+=liStr.toString();
        	link+="<li><a href="+lastPageStr+">»</a></li></ul>";
        	
            String html = "{0} 共{1}页 每页显示{2}条 共有{3}条";
            html = MessageFormat.format(html,
            		link,
                    String.valueOf(totalPageNum),
                    String.valueOf(pageSize),
                    String.valueOf(totalCount));
            out.println(html);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return EVAL_BODY_INCLUDE;
    }
}

需要注意的是,TagSupport是基于JSP2.1的。


在WEB-INF下,需要定义一个标签库文件,参考如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd">

<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>page</short-name>
   
    <tag>
        <name>page</name>
        <tag-class>com.lemon.util.PageTag</tag-class>
        <body-content>empty</body-content>
       
        <attribute>
            <name>url</name>
            <required>true</required>
            <rtexprvalue>false</rtexprvalue>
        </attribute>
        <attribute>
            <name>curPage</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>pageSize</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>totalCount</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

不要忘记,在web.xml中需要定义我们的标签库:


<jsp-config>
		<taglib>
			<taglib-uri>/WEB-INF/page</taglib-uri>
			<taglib-location>page.tld</taglib-location>
		</taglib>
	</jsp-config>

到此,基本完成了分页标签的开发工作,最后看下页面中如何调用吧。

首先是引入:

<%@taglib prefix="page" uri="/WEB-INF/page"%>
然后是调用:

<div class="row-fluid">
				<page:page
					url="http://ip:port/webapp/xxx.action"
					pageSize="${params.pageSize}" totalCount="${params.totalCount}"
					curPage="${params.curPage}" />
		</div>

我们可能还需要Model来维护标签中的一些参数,这里就不再赘述。

你可能感兴趣的:(jsp,web开发,分页,bootstrap,pagination)