jsp java分页标签

java

package org.whvcse.common;

import java.io.Serializable;
/**
 * @desc 分页容器类
 * @author mengdejun 
 */
public class Page implements Serializable 
{
	private static final long serialVersionUID = 1L;
	private int allPage = 0;//总页数
	private int allRecords = 0;//总记录
	private int currentPage = 1;//当前页
	private String link = null;//链接信息
	private int perRecords = 5;//显示条数

	public int getAllPage() {
		return allPage;
	}

	public int getAllRecords() {
		return allRecords;
	}

	public int getCurrentPage() {
		return currentPage;
	}
	/**
     * 
     * @return 容器索引结束坐标
     */
	public int getEndIndex() {
		return ((this.currentPage - 1) * this.perRecords + this.perRecords > this.allRecords) ? this.allRecords
				: (this.currentPage - 1) * this.perRecords + this.perRecords;
	}

	public String getLink() {
		return link;
	}

	public int getPerRecords() {
		return perRecords;
	}
    /**
     * 
     * @return 容器索引开始坐标
     */
	public int getStartIndex() {
		return (this.currentPage - 1) * this.perRecords;
	}

	public boolean hasNext() {
		return this.currentPage < this.allPage;
	}

	public boolean hasPrevious() {
		return this.currentPage > 1;
	}

	public void setAllPage(int allPage) {
		this.allPage = (allPage % this.perRecords == 0) ? (allPage / this.perRecords)
				: (allPage / this.perRecords + 1);
	}

	public void setAllRecords(int allRecords) {
		this.allRecords = allRecords;
	}

	public void setCurrentPage(int currentPage) {
		if (currentPage < 1)
			this.currentPage = 1;
		else if (currentPage > this.allPage)
			this.currentPage = this.allPage;
		else
			this.currentPage = currentPage;
	}

	public void setCurrentPage(String currentPage) {
		if (null == currentPage || currentPage.equals(""))
			currentPage = "1";
		try {
			this.setCurrentPage(Integer.parseInt(currentPage));
		} catch (NumberFormatException e) {
			this.currentPage = 1;
		}
	}

	public void setLink(String link) {
		this.link = link;
	}

	public void setPerRecords(int perRecords) {
		this.perRecords = perRecords;
	}

	public void setPerRecords(String perRecords) {
		try {
			this.perRecords = Integer.parseInt(perRecords);
		} catch (NumberFormatException e) {
			this.perRecords = 5;
		}
	}
}

 

package org.whvcse.ext;
import java.io.Serializable;
import javax.servlet.ServletRequest;
import org.whvcse.common.Page;
/**
 * @desc 标签生成器接口 拓展生成器需实现该接口并返回链接字符串 
 * @author mengdejun
 */
public interface LinkHandler extends Serializable 
{
	/**
	 * 
	 * @param page 分页类信息
	 * @param request httpServletRequest对象封装
	 * @param format 链接信息格式化
	 * @param param 当前分页标签变量
	 * @return 链接字符串
	 * @throws NullPointerException
	 */
	public String parse(Page page,ServletRequest request,String format,String param) throws NullPointerException;
}

 

package org.whvcse.ext.link;

import javax.servlet.ServletRequest;

import org.whvcse.common.Page;
import org.whvcse.ext.LinkHandler;
/**
 * @desc 默认链接生成器,该类需自己扩展以实现自己的样式,需实现LinkHandler接口,自定义时候请在标签cls属性填入类的全名
 * @author mengdejun
 */
public class GeneralLinkHandler implements LinkHandler
{
	private static final long serialVersionUID = 1L;
	public String parse(Page page,ServletRequest request,String format,String param) throws NullPointerException 
	{
		String returnStr="共"+page.getAllPage()+"页,第"+page.getCurrentPage()+"页&nbsp;";
		for(int i=1;i<=page.getAllPage();i++)
		{
			returnStr+="<a href=index.jsp?"+param+"="+i+">"+i+"</a>&nbsp;";
		}
		return returnStr;
	}
}

 

package org.whvcse.page;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import org.whvcse.ext.LinkHandler;
public class TagLink extends TagSupport 
{
	private static final long serialVersionUID = 1L;
	private TagPage page=null;//父容器
	private String format="共{allPage},第{currentPage}";//链接格式,可自定义
	private LinkHandler handler=null;//链接处理类
	private String var=null;//返回信息
	private String cls="org.whvcse.ext.link.GeneralLinkHandler";//默认链接类
	@SuppressWarnings({ "static-access", "unchecked" })
	@Override
	public int doEndTag() throws JspException
	{
		//获取父容器标签对象
		this.page=(TagPage) this.findAncestorWithClass(this,TagPage.class);
		JspWriter out=this.pageContext.getOut();
		try 
		{
			Class c = Class.forName(this.cls);//插件设置,加载自定义插件类
			this.handler=(LinkHandler) c.newInstance();
			String temp=this.handler.parse(this.page.getPage(),pageContext.getRequest(),this.format,this.page.getParam());
			if(null==this.var)
			{
				out.println(temp);
			}
			else
			{
				this.pageContext.setAttribute(this.var,temp,this.page.getScope(this.page.getScope()));
			}
		} catch (ClassNotFoundException e1) {
			e1.printStackTrace();
		}
		catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return EVAL_PAGE;
	}
	public String getFormat() 
	{
		return format;
	}
	public void setFormat(String format) {
		this.format = format;
	}
	public String getCls() {
		return cls;
	}
	public void setCls(String cls) {
		this.cls = cls;
	}
	public String getVar() {
		return var;
	}
	public void setVar(String var) {
		this.var = var;
	}
	
	
}

 

package org.whvcse.page;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.whvcse.common.Page;
public class TagPage extends BodyTagSupport 
{
	private static final long serialVersionUID = 1L;
	private String id=null;//数据源ID
	private String target=null;//目标源,处理后的链表
	private String scope=null;//变量作用域
	private String param=null;//当前页标签变量
	@SuppressWarnings("unchecked")
	private List list=null;
	private Page page=null;//分页类
	private String rows="5";//显示行数
	public TagPage()
	{
		this.scope="request";
		this.param="page";
		this.target="pageData";
	}
	@Override
	public int doEndTag() throws JspException 
	{
		super.pageContext.removeAttribute(this.id, this.getScope(this.scope));
		return EVAL_PAGE;
	}
	@SuppressWarnings("unchecked")
	@Override
	public int doStartTag() throws JspException 
	{
		this.list=(List) super.pageContext.getAttribute(this.id,this.getScope(this.scope));
		this.page=new Page();
		this.page.setAllRecords(this.list.size());
		this.page.setPerRecords(this.rows);
		this.page.setAllPage(this.list.size());
		String start=super.pageContext.getRequest().getParameter(this.param);
		this.page.setCurrentPage(start);
		this.list=this.list.subList(this.page.getStartIndex(),this.page.getEndIndex());
		super.pageContext.setAttribute(this.target, this.list, this.getScope(this.scope));
		return EVAL_BODY_INCLUDE;
	}

	public String getId() 
	{
		return id;
	}
	public void setId(String id) 
	{
		this.id = id;
	}
	public String getTarget() 
	{
		return target;
	}
	public void setTarget(String target) 
	{
		this.target = target;
	}
	public String getScope() {
		return scope;
	}
	public void setScope(String scope) {
		this.scope = scope;
	}
	public String getParam() {
		return param;
	}
	public void setParam(String param) {
		this.param = param;
	}
	@SuppressWarnings("static-access")
	public int getScope(String scope)
	{
		if(scope.equals("request")||scope.equals("REQUEST")||scope.equals("r"))return super.pageContext.REQUEST_SCOPE;
		if(scope.equals("session")||scope.equals("SESSION")||scope.equals("s"))return super.pageContext.SESSION_SCOPE;
		if(scope.equals("application")||scope.equals("APPLICATION")||scope.equals("a"))return super.pageContext.APPLICATION_SCOPE;
		if(scope.equals("page")||scope.equals("PAGE")||scope.equals("p"))return super.pageContext.PAGE_SCOPE;
		return super.pageContext.REQUEST_SCOPE;
	}
	public String getRows() 
	{
		return rows;
	}
	public void setRows(String rows) 
	{
		this.rows = rows;
	}
	public Page getPage() 
	{
		return page;
	}	
	
}

 

<?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.3</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>whvcse</short-name>
 <uri>http://mengdejun.iteye.com</uri>
 <tag>
  <name>page</name>
  <tag-class>org.whvcse.page.TagPage</tag-class>
  <body-content>JSP</body-content>
  <description/>
  <attribute>
   <name>scope</name>
   <rtexprvalue>true</rtexprvalue>
   <description>
         分页类
         </description>
  </attribute>
   <attribute>
   <name>param</name>
    <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
           页码
         </description>
  </attribute>
   <attribute>
   <name>rows</name>
    <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
          显示行数
         </description>
  </attribute>
  <attribute>
   <name>id</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
          变量列表
         </description>
  </attribute>
  <attribute>
   <name>target</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
       别名
         </description>
  </attribute>
 </tag>
 <tag>
  <name>pageLink</name>
  <tag-class>org.whvcse.page.TagLink</tag-class>
  <body-content>empty</body-content>
  <description/>
  <attribute>
   <name>format</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
          链接信息
         </description>
  </attribute>
  <attribute>
   <name>cls</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
           扩展信息,实现LinkHandler接口
         </description>
  </attribute>
  <attribute>
   <name>var</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
           该属性将不输出分页信息,将信息赋给var变量
         </description>
  </attribute>
 </tag>
</taglib>

 

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="whvcse" uri="http://mengdejun.iteye.com"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>分页标签实例</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <%
  	List a=new ArrayList();
  for(int i=1;i<=50;i++)
  {
		a.add(i);
 		request.setAttribute("list",a);
  }
   %>
  <body>
   <whvcse:page id="list" target="olist" scope='request' rows='10'><!-- 分类标签 -->
   <%
   			List o=(List)request.getAttribute("olist");
   			for(int i=0;i<o.size();i++)
   			{
   				out.print(o.get(i)+"<br/>");
   			}
   		 %>
   		<whvcse:pageLink/>
   </whvcse:page>
  </body>
</html>

你可能感兴趣的:(java,jsp,servlet,css,ext)