jsp自定义分页标签

package com.ajax;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class Pager extends TagSupport{
	 private String url;         //请求URI   
	    private int pageSize = 10;  //每页要显示的记录数   
	   private int pageNo = 1;     //当前页号   
	   private int recordCount;    //总记录数   
	 
	   @SuppressWarnings("unchecked")   
	   public int doStartTag() throws JspException {   
	       int pageCount = (recordCount + pageSize - 1) / pageSize;  //计算总页数   
	           
	       //拼写要输出到页面的HTML文本   
	        StringBuilder sb = new StringBuilder();   
	           
	          
	        sb.append("<style type=\"text/css\">");   
	        sb.append(".pagination {padding: 5px;float:right;font-size:12px;}");   
	       sb.append(".pagination a, .pagination a:link, .pagination a:visited {padding:2px 5px;margin:2px;border:1px solid #aaaadd;text-decoration:none;color:#006699;}");   
	       sb.append(".pagination a:hover, .pagination a:active {border: 1px solid #ff0000;color: #000;text-decoration: none;}");   
	         sb.append(".pagination span.current {padding: 2px 5px;margin: 2px;border: 1px solid #ff0000;font-weight: bold;background-color: #ff0000;color: #FFF;}");   
	         sb.append(".pagination span.disabled {padding: 2px 5px;margin: 2px;border: 1px solid #eee; color: #ddd;}");   
	        sb.append("</style>\r\n");   
	        sb.append("<div class=\"pagination\">\r\n");   
	        if(recordCount == 0){   
	           sb.append("<strong>没有可显示的项目</strong>\r\n");   
	         }else{   
	           //页号越界处理   
	            if(pageNo > pageCount){      pageNo = pageCount; }   
	           if(pageNo < 1){      pageNo = 1; }   
	                
	             sb.append("<form method=\"post\" action=\"").append(this.url)   
	                 .append("\" name=\"qPagerForm\">\r\n");   
	               
	            //获取请求中的所有参数   
	            HttpServletRequest request = (HttpServletRequest) pageContext   
	                    .getRequest();   
	             Enumeration<String> enumeration = request.getParameterNames();   
	            String name = null;  //参数名   
	            String value = null; //参数值   
	             //把请求中的所有参数当作隐藏表单域   
	             while (enumeration.hasMoreElements()) {   
	                 name =  enumeration.nextElement();   
	                 value = request.getParameter(name);   
	                // 去除页号   
	                 if (name.equals("pageNo")) {   
	                    if (null != value && !"".equals(value)) {   
	                         pageNo = Integer.parseInt(value);   
	                   }   
	                    continue;   
	                }   
	                sb.append("<input type=\"hidden\" name=\"")   
	                   .append(name)   
	                  .append("\" value=\"")   
	                   .append(value)   
	                  .append("\"/>\r\n");   
	             }   
	       
	            // 把当前页号设置成请求参数   
	             sb.append("<input type=\"hidden\" name=\"").append("pageNo")   
	                 .append("\" value=\"").append(pageNo).append("\"/>\r\n");   
	               
	           // 输出统计数据   
	           sb.append(" 共<strong>").append(recordCount)   
	                .append("</strong>项")   
	                 .append(",<strong>")   
	                 .append(pageCount)   
	               .append("</strong>页: \r\n");   
	               
	             //上一页处理   
	             if (pageNo == 1) {   
	                 sb.append("<span class=\"disabled\">« 上一页")   
	                    .append("</span>\r\n");   
	             } else {   
	                sb.append("<a href=\"javascript:turnOverPage(")   
	                  .append((pageNo - 1))   
	                 .append(")\">« 上一页</a>\r\n");   
	            }   
	              
	            //如果前面页数过多,显示"..."   
	             int start = 1;    
	            if(this.pageNo > 4){   
	               start = this.pageNo - 1;   
	               sb.append("<a href=\"javascript:turnOverPage(1)\">1</a>\r\n");   
	              sb.append("<a href=\"javascript:turnOverPage(2)\">2</a>\r\n");   
	                sb.append("…\r\n");   
	           }   
	            //显示当前页附近的页   
	            int end = this.pageNo + 1;   
	           if(end > pageCount){   
	               end = pageCount;   
	             }   
	           for(int i = start; i <= end; i++){   
	                if(pageNo == i){   //当前页号不需要超链接   
	                   sb.append("<span class=\"current\">")   
	                        .append(i)   
	                        .append("</span>\r\n");   
	                 }else{   
	                    sb.append("<a href=\"javascript:turnOverPage(")   
	                       .append(i)   
	                        .append(")\">")   
	                         .append(i)   
	                        .append("</a>\r\n");   
	                }   
	             }   
	             //如果后面页数过多,显示"..."   
	           if(end < pageCount - 2){   
	               sb.append("…\r\n");   
	           }   
	             if(end < pageCount - 1){   
	                 sb.append("<a href=\"javascript:turnOverPage(")   
	               .append(pageCount - 1)   
	               .append(")\">")   
	                 .append(pageCount - 1)   
	                .append("</a>\r\n");   
	            }   
	            if(end < pageCount){   
	                sb.append("<a href=\"javascript:turnOverPage(")   
               .append(pageCount)   
	               .append(")\">")   
	                .append(pageCount)   
	                .append("</a>\r\n");    
	        }   
	               
         //下一页处理   
	           if (pageNo == pageCount) {   
	              sb.append("<span class=\"disabled\">下一页 »")   
	                    .append("</span>\r\n");   
	           } else {   
	              sb.append("<a href=\"javascript:turnOverPage(")   
	                   .append((pageNo + 1))   
	                  .append(")\">下一页 »</a>\r\n");   
	             }   
	            sb.append("</form>\r\n");   
	      
	           // 生成提交表单的JS   
	           sb.append("<script language=\"javascript\">\r\n");   
	            sb.append("  function turnOverPage(no){\r\n");   
	          sb.append("    if(no>").append(pageCount).append("){");   
	           sb.append("      no=").append(pageCount).append(";}\r\n");   
	           sb.append("    if(no<1){no=1;}\r\n");   
	           sb.append("    document.qPagerForm.pageNo.value=no;\r\n");   
	           sb.append("    document.qPagerForm.submit();\r\n");   
	           sb.append("  }\r\n");   
	            sb.append("</script>\r\n");   
	       }   
	       sb.append("</div>\r\n");   
	          
	         //把生成的HTML输出到响应中   
	      try {   
	           pageContext.getOut().println(sb.toString());   
	        } catch (IOException e) {   
	            throw new JspException(e);   
	      }   
	       return SKIP_BODY;  //本标签主体为空,所以直接跳过主体   
	    }   
	 
	   public void setUrl(String url) {   
	         this.url = url;   
	     }   
	    public void setPageSize(int pageSize) {   
	         this.pageSize = pageSize;   
	     }   
	     public void setPageNo(int pageNo) {   
	         this.pageNo = pageNo;   
	    }   
	    public void setRecordCount(int recordCount) {   
	         this.recordCount = recordCount;   
	    }   
	 }



package com.ajax;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;


public class Personbean {
private Connection ct=null;
private PreparedStatement ps=null;
private ResultSet rs=null;
public List all(int pageNo,int pageSize){
	List list=new ArrayList();
	try{
		ct=Conn.getinstance();
		ps=ct.prepareStatement("select top "+pageSize+"* from Person  where pid not in (select top "+pageSize*(pageNo-1)+" pid from Person ) ");
		rs=ps.executeQuery();
		Person p=null;
		while(rs.next()){
			p=new Person();
			p.setPid(rs.getInt(1));
			p.setMname(rs.getString(2));
			list.add(p);
		}
	}catch(Exception e){
		e.printStackTrace();
	}finally{
		DBclose.close(ct, ps, rs);
	}
	return list;
}
public int Count() {
	int rowCount=0;
	int pageSize=10;
	int pageCount=0;
	try{
		ct=Conn.getinstance();
		ps=ct.prepareStatement("select count(*) from Person ");
		rs=ps.executeQuery();
		if(rs.next()){
			rowCount=rs.getInt(1);
		}
		if(rowCount%pageSize==0){
			pageCount=rowCount/pageSize;
		}else{
			pageCount=rowCount/pageSize+1;
		}
	}catch(Exception e){
		e.printStackTrace();
		
	}finally{
		DBclose.close(ct, ps, rs);
	}
	return pageCount;
}
public int reCount(){
	int recordCount=0;
	try{
		ct=Conn.getinstance();
	ps=ct.prepareStatement("select count(*) from Person");
	rs=ps.executeQuery();
if(rs.next()){
		
		recordCount=rs.getInt(1);
	}
		
	}catch(Exception e){
		e.printStackTrace();
		
	}finally{
		DBclose.close(ct, ps, rs);
	}
	return recordCount;
}
}

package com.ajax2;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ajax.Personbean;

public class Temp extends HttpServlet {

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		
		request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		Personbean pb=new Personbean();
		int pageNo=Integer.parseInt((String)request.getParameter("pageNo"));
		System.out.print(pageNo);
	int pageSize=10;

		ArrayList list=(ArrayList)pb.all(pageNo, pageSize);
		int pageCount=pb.Count();
		int recordCount=pb.reCount();
		request.setAttribute("pageCount", pageCount+"");
		request.setAttribute("recordCount", recordCount+"");
		request.setAttribute("pageNo", pageNo+"");
		request.setAttribute("pageSize", pageSize+"");
		request.setAttribute("list", list);
		request.getRequestDispatcher("/First.jsp").forward(request, response);
			
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doGet(request, response);
	}

}

<?xml version="1.0" encoding="UTF-8"?>  
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">  
    <tlib-version>0.9</tlib-version>  
  <!--标签头-->  
   <short-name>w</short-name>  
    <!--将来在页面用taglib引用时的uri属性,这部分的名字可以随便写,只要是符合HTTP网址形式的 -->  
   <uri>http://javacrazyer.iteye.com/tags/pager</uri>  
      
    <!-- 自定义标签的描述信息 -->  
    <tag>  
       <!-- 标签名 -->  
       <name>pager</name>  
        <!-- 对应的标签处理类全限定名 -->  
       <tag-class>com.ajax.Pager</tag-class>  
        <!-- 标签主体的类型 -->  
       <body-content>empty</body-content>  
       <!-- 当前页号属性的描述信息 -->  
       <attribute>  
           <!-- 属性名 -->  
            <name>pageNo</name>  
           <!-- 该属性是否为必要的 -->  
          <required>true</required>  
            <!-- 属性值是否可以在JSP运行时期动态产生 -->  
            <rtexprvalue>true</rtexprvalue>  
           <!-- 属性的数据类型 -->  
            <type>int</type>  
       </attribute>  
       <!-- 总记录数属性的描述信息 -->  
        <attribute>  
            <name>recordCount</name>  
           <required>true</required>  
            <rtexprvalue>true</rtexprvalue>  
            <type>int</type>  
        </attribute>  
        <!-- 总页数属性的描述信息 -->  
       <attribute>  
            <name>pageSize</name>  
            <required>true</required>  
           <rtexprvalue>true</rtexprvalue>  
            <type>int</type>  
        </attribute>  
        <!-- 分页标签要跳转的URI属性的描述信息 -->  
        <attribute>  
            <name>url</name>  
            <required>true</required>  
            <rtexprvalue>true</rtexprvalue>  
            <type>java.lang.String</type>  
       </attribute>  
    </tag>  
</taglib>  

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>Show</servlet-name>
    <servlet-class>com.ajax2.Show</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>temp</servlet-name>
    <servlet-class>com.ajax2.Temp</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>Show</servlet-name>
    <url-pattern>/test</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>temp</servlet-name>
    <url-pattern>/go</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <jsp-config>        <taglib>            <taglib-uri>/tld/lhp2012</taglib-uri>            <taglib-location>/WEB-INF/pager.tld</taglib-location>        </taglib>    </jsp-config>
 <filter>
  <filter-name>encode</filter-name> 
  <filter-class>com.ajax.Chin</filter-class>
 
  
 
  </filter>
 <filter-mapping>
  <filter-name>encode</filter-name> 
  <url-pattern>/*</url-pattern> 
  </filter-mapping>
</web-app>


 

<%@ page language="java" import="java.util.*,com.ajax.*" pageEncoding="utf-8"%>
<%@taglib uri="http://javacrazyer.iteye.com/tags/pager" prefix="q"%>   

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String a=(String)request.getAttribute("pageCount");
int pageCount=Integer.parseInt(a);
ArrayList list=(ArrayList)request.getAttribute("list");
int pageNo=Integer.parseInt((String)request.getAttribute("pageNo"));
int pageSize=Integer.parseInt((String)request.getAttribute("pageSize"));
int recordCount=Integer.parseInt((String)request.getAttribute("recordCount"));
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  

    <base href="<%=basePath%>">
    
    <title>My JSP 'First.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache" charset="utf-8">
	<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">
	
	
	

  </head>
  
  <body>
 <table>
  
 <tr><th>编号</th><th>姓名</th></tr>
 <%for(int i=0;i<list.size();i++){
 Person p=(Person)list.get(i);
 %>
<tr><td><%=p.getPid() %></td><td><%=p.getMname() %></td></tr>
 <%} %>

 </table>
  <q:pager pageSize="${pageSize}" pageNo="${pageNo}" url="go" recordCount="${recordCount}"/>   
 
  </body>
</html>


 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值