`
ln_ydc
  • 浏览: 270736 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

jsp自定义标签——分页标签

    博客分类:
  • Java
 
阅读更多

 

效果预览:

实现代码:

分页标签处理类:

package ln.ydc.blog.web.tag.myjsp;

import java.io.IOException;

import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;

import common.util.Pagination;

/**
 * 分页标签处理类
 * 
 * @author yangdc
 * 
 */
public class PaginationTag extends SimpleTagSupport {
	/**
	 * 分页数据(required)
	 */
	private Pagination pagination;
	/**
	 * 查询form的Id,默认为queryForm
	 */
	private String queryForm = "queryForm";
	/**
	 * 分页div,默认为paginationId
	 */
	private String divId = "paginationId";
	/**
	 * 分页样式,默认为technorati
	 */
	private String divClass = "technorati";

	public void doTag() throws JspException, IOException {
		// 参数验证
		
		StringBuffer strBuf = new StringBuffer();
		strBuf.append("<script type=\"text/javascript\">");
		strBuf.append("var paga_queryForm = document.forms['").append(queryForm).append("'];");
                
                /*
                strBuf.append("var newInput = document.createElement('input');");
		strBuf.append("newInput.type='hidden';");
		strBuf.append("newInput.name='pageNo';");
		strBuf.append("paga_queryForm.appendChild(newInput);");
                */
                strBuf.append("function paga_toPage(pageNo) {");
                strBuf.append("paga_queryForm.pageNo.value=").append("pageNo;");
		strBuf.append("paga_queryForm.submit();");
		strBuf.append("}");
		strBuf.append("</script>");

		strBuf.append("<div id=\"").append(divId).append("\" class=\"").append(divClass).append("\">");
		
		// 上一页
		if (pagination.getPageNo() == 1) {
			// strBuf.append(" <a href=\"#\"><span class=\"first_link\">首页</span></a> ");
			strBuf.append(" <span class=\"disabled\">").append(" << </span> ");
		} else {
			// strBuf.append(" <a href=\"#\" onclick=\"paga_toPage(1);\"><span class=\"first_link\">首页</span></a> ");
			strBuf.append(" <a href=\"#\" onclick=\"paga_toPage(").append(pagination.getPageNo() - 1).append(")\"> << </a> ");
		}

		for (int i = pagination.getStartIndex(); i <= pagination.getEndIndex(); i++) {
			if (pagination.getPageNo() == i) {
				strBuf.append("<span class=\"current\">").append(i).append("</span>");
			} else {
				strBuf.append("<a href=\"#\"").append(" onclick=\"paga_toPage(").append(i).append(");\">").append(i).append("</a>");
			}
		}

		// 下一页
		if (pagination.getPageNo() == pagination.getTotalPage()) {
			strBuf.append(" <span class=\"disabled\">").append(" >> </span> ");
			// strBuf.append(" <a href=\"#\"><span class=\"end_link\">末页</span></a> ");
		} else {
			strBuf.append(" <a href=\"#\" onclick=\"paga_toPage(").append(pagination.getPageNo() + 1).append(")\"> >> </a> ");
			// strBuf.append(" <a href=\"#\" onclick=\"paga_toPage(").append(pagination.getTotalPage()).append(")\"><span class=\"end_link\">末页</span></a> ");
		}
		strBuf.append("<span class=\"info\">(第").append(pagination.getPageNo()).append("/").append(pagination.getTotalPage()).append("页").append(" 共").append(pagination.getTotalRecord()).append(
				"条)</span>");

		strBuf.append("</div>");
		// System.out.println(strBuf.toString());
		JspContext ctx = getJspContext();
		JspWriter out = ctx.getOut();
		out.print(strBuf.toString());
	}

	public Pagination getPagination() {
		return pagination;
	}

	public void setPagination(Pagination pagination) {
		this.pagination = pagination;
	}

	public String getQueryForm() {
		return queryForm;
	}

	public void setQueryForm(String queryForm) {
		this.queryForm = queryForm;
	}

	public String getDivId() {
		return divId;
	}

	public void setDivId(String divId) {
		this.divId = divId;
	}

	public String getDivClass() {
		return divClass;
	}

	public void setDivClass(String divClass) {
		this.divClass = divClass;
	}
}

 

分页工具类:

package common.util;

import java.util.List;

/**
 * 分页工具类
 * @author ydc
 *
 * @param <T>
 */
public class Pagination<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 Pagination(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);
		// 根据索引数目,当前页,总页数计算开始索引和结束索引(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;
	}

	/**
	 * 起始索引
	 * @return
	 */
	public int getStartIndex() {
		return startIndex;
	}

	/**
	 * 结束索引
	 * @return
	 */
	public int getEndIndex() {
		return endIndex;
	}
	/****************************************************************/
	/************************get/set方法******************************/
	/****************************************************************/

	public int getIndexCount() {
		return indexCount;
	}
	
	public void setIndexCount(int indexCount) {
		this.indexCount = indexCount;
	}
}

 标签声明文件:MyTaglib.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib 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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">

	<description>自定义标签类</description>
	<tlib-version>1.0</tlib-version>
	<short-name>Mytaglib</short-name>
	<uri></uri>

	<tag>
		<description>分页标签</description>
		<name>Pagination</name>
		<tag-class>ln.ydc.blog.web.tag.myjsp.PaginationTag</tag-class>
		<body-content>empty</body-content>

		<attribute>
			<description>
				Collection of items to iterate over.
			</description>
			<name>pagination</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<type>java.lang.Object</type>
		</attribute>
		
		<attribute>
			<name>queryForm</name>
			<required>false</required>
		</attribute>
		<attribute>
			<name>divId</name>
			<required>false</required>
		</attribute>
		<attribute>
			<name>divClass</name>
			<required>false</required>
		</attribute>
	</tag>

</taglib>

 分页样式(具体见附件):

/*CSS technorati style pagination*/

DIV.technorati {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center
}
DIV.technorati A {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 6px; BACKGROUND-POSITION: 50% bottom; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 6px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; BORDER-LEFT: #ccc 1px solid; COLOR: rgb(66,97,222); MARGIN-RIGHT: 3px; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px solid; TEXT-DECORATION: none
}
DIV.technorati A:hover {
	BACKGROUND-IMAGE: none; COLOR: #fff; BACKGROUND-COLOR: #4261df
}
DIV.technorati A:active {
	BACKGROUND-IMAGE: none; COLOR: #fff; BACKGROUND-COLOR: #4261df
}
DIV.technorati SPAN.current {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; COLOR: #000; MARGIN-RIGHT: 3px; PADDING-TOP: 2px
}
DIV.technorati SPAN.disabled {
	BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #ddd; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid
	/* DISPLAY: none */
}

 应用实例:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib uri="/WEB-INF/tlds/MyTaglib.tld" prefix="mytag"%>
<c:set var="ctx" value="${pageContext.request.contextPath}"></c:set>

<!-- 分页样式(附件中css.css文件) -->
<link rel="stylesheet" type="text/css" href="${ctx }/res/styles/paginationStyle.css">


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <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>
  
  <body>
    <form action="${ctx }/admin/user" method="post" name="userListForm">
    	<input type="hidden" name="operation" value="list"/>
        
        <!-- 为了兼容ie -->
        <input type="hidden" name="pageNo" value="${pagination.pageNo }">
        
        <table border="1">
    		<caption>用户列表</caption>
    		<tr>
    			<td>用户标识</td>
    			<td>用户名</td>
    			<td>真实姓名</td>
    			<td>性别</td>
    			<td>注册日期</td>
    			<td>删除标志</td>
    			<td colspan="3">
    				操作&nbsp;&nbsp;
    				<a href="${ctx }/admin/user?operation=add">添加用户</a>
    			</td>
    		</tr>
    		<c:forEach var="user" items="${pagination.records}">
	    		<tr>
	    			<td>${user.id }</td>
	    			<td>${user.userName }</td>
	    			<td>${user.realName }</td>
	    			<td>${user.gender }</td>
	    			<td>${user.registerDate }</td>
	    			<td>${user.deleteFlag }</td>
	    			<td>
	    				<c:choose>
	    					<c:when test="${user.deleteFlag==0}">
	    						<a href="${ctx }/admin/user?operation=delete&id=${user.id }&pageNo=${pagination.pageNo }">删除</a>
	    					</c:when>
	    					<c:otherwise>
	    						<a href="${ctx }/admin/user?operation=recover&id=${user.id }&pageNo=${pagination.pageNo }">恢复</a>
	    					</c:otherwise>
	    				</c:choose>
	    			</td>
	    			<td><a href="${ctx }/admin/user?operation=edit&id=${user.id }">编辑</a></td>
	    			<td><a href="${ctx }/admin/user?operation=info&id=${user.id }">查看</a></td>
	    		</tr>
    		</c:forEach>
    	</table>
    	<mytag:Pagination pagination="${pagination}" queryForm="userListForm" divId="pagaId" />
    </form>
  </body>
</html>
 
  • 大小: 82.8 KB
分享到:
评论
6 楼 薛小强 2016-09-22  
document.forms['formName'];
里面放的是form的name值,不是id值。
5 楼 双双37278752 2014-06-24  
能给个完整的实现分页的代码吗?最好给出一个Demo,谢谢
4 楼 ribavnu 2013-03-19  
能给个完整的实现分页的代码吗?还是不能实现分页呀。
3 楼 ln_ydc 2012-08-03  
Zhang987526341 写道
请问,您在action或servlet里面的代码怎么写啊

Pagination<User> paga = userDao.list(pageNo, pageSize, deleteStatus);
			request.setAttribute("pagaination", paga);
2 楼 Zhang987526341 2012-07-30  
[align=center][/align]
1 楼 Zhang987526341 2012-07-30  
请问,您在action或servlet里面的代码怎么写啊

相关推荐

    jsp使用自定义标签taglib分页系列——完整例子

    jsp使用自定义标签taglib分页系列——完整例子

    JSP源码——分页 QQ菜单 jsp标签_noka3.9.zip

    【JSP源码——分页 QQ菜单 jsp标签_noka3.9.zip】是一个包含JSP编程中的分页和自定义标签实现的源代码集合。这个压缩包主要展示了如何在JSP应用程序中创建一个类似QQ菜单的交互式界面,并利用JSP自定义标签来简化...

    jsp分页

    根据提供的压缩包文件名“jsp自定义标签——分页标签 - Free Coding - ITeye技术网站_files”,我们可以推断内容可能涉及自定义JSP分页标签的实现。通常,自定义标签的流程如下: 1. **创建Tag类**:继承`javax....

    自定义分页标签

    本文档将详细介绍一个使用Java Server Pages (JSP)技术实现的自定义分页标签——`PagerTag`。该标签允许开发者在不编写冗余代码的情况下轻松地在JSP页面中实现分页功能。 #### 二、标签简介 `PagerTag`是一个自定义...

    Struts+Hibernate+自定义标签的网上书店

    本网上书店系统是一个基于MVC(Model-View-Controller)设计模式的Web应用程序,它整合了Java的两大核心框架——Struts和Hibernate,以及自定义标签技术,旨在提供一个高效、安全的图书浏览与购买平台。 **1. ...

    毕业设计论文-IT计算机-[其他类别]分页 QQ菜单 jsp标签_noka3.9-源码.zip

    这篇毕业设计论文主要聚焦在IT计算机领域,特别是Java后台开发中的一个重要实践——使用jsp标签来实现分页功能,以及QQ菜单的构建。这里我们将深入探讨这些知识点,以便更好地理解这个项目。 首先,让我们来了解**...

    java分页——taglib

    在`pagerdemo`中,可能包含了一个自定义的taglib,例如名为`pager.tld`的标签库描述符文件,它定义了分页标签的相关属性和方法。这个taglib可能有一个名为`&lt;pager:display&gt;`的标签,用于在页面上渲染分页组件。标签...

    分页组件--通用的分页标签

    本文将深入探讨“分页组件——通用的分页标签”,以及如何在JSP环境中实现这一功能。 首先,我们要理解分页组件的基本原理。在网页上展示大量数据时,一次性加载所有数据可能导致页面加载速度慢,用户体验下降。...

    自制java分页标签

    本自制的Java分页标签通过两个关键参数——总页数和当前页数,实现了动态控制标签的显示,以提供用户友好的导航体验。下面将详细探讨分页标签的原理、实现方式以及如何自定义。 1. 分页原理: 分页的基本思想是将...

    JSP源码——[影音娱乐]北雨影音系统 v1.0.1_bymov101.zip

    - 为了提高代码复用性和可维护性,开发者可能会使用JSP标准标签库(JSTL)或者自定义标签。这些标签可以简化页面逻辑,例如,用于分页、数据遍历等常见任务。 6. **响应式设计与前端技术**: - 考虑到多设备访问...

    struts中自定义的tag的Java类中如何获得session

    为了解决代码重复的问题,提高代码复用性以及增强代码的可维护性,Struts框架提供了一种机制——自定义标签(Custom Tags)来帮助开发者解决这一问题。 #### 1.2 自定义标签的实现方式 在Struts中实现自定义标签...

    JSP源码——[信息办公]XML考试系统_xmlks.zip

    7. **核心技术**:JSP中的自定义标签(Tag Libraries)和Servlet可能会被用到,它们可以扩展JSP的功能并处理复杂逻辑。此外,DOM(Document Object Model)或SAX解析器用于处理XML文件,将XML数据转换为Java对象,...

    JSP源码——opencart简洁主题simplecart sot12.zip

    《深入解析JSP源码——以Opencart简洁主题SimpleCart sot12为例》 在Web开发领域,JavaServer Pages(JSP)是一种广泛使用的动态网页技术,它允许开发者将HTML代码与Java代码相结合,以创建交互式、数据驱动的网页...

    jsp程序设计实用案例教程课件、代码

    6. **JSP自定义标签**:如何创建和使用自定义标签,提高代码复用性和可读性。 7. **MVC模式**:探讨在JSP中实现Model-View-Controller架构,以分离业务逻辑、数据模型和用户界面。 **项目实践——网上书店** 教程...

    jsp自学教程8例 1

    JSP自定义标签库(Tag Libraries) 自定义标签库允许开发者创建可重用的组件,提高代码的可读性和可维护性。常见的有JSTL(JavaServer Pages Standard Tag Library),包含一系列用于处理XML、查询数据库等功能的...

    基于SSM框架的旅游网站

    3)分页使用的是jsp自定义标签; 4)上传图片到项目也是封装好了工具类; 5)在线支付调用易宝的支付接口; 6)自定义拦截器对为登陆用户进行拦截; 7)复杂的业务在于一个景点对应多个门票,想要门票显示在对应...

    后端+旅游网站+springboot+毕业设计

    3)分页使用的是jsp自定义标签; 4)上传图片到项目也是封装好了工具类; 5)在线支付调用易宝的支付接口; 6)自定义拦截器对为登陆用户进行拦截; 7)复杂的业务在于一个景点对应多个门票,想要门票显示在对应...

    基于SSM使用idea构建的旅游网站---毕业设计

    3)分页使用的是jsp自定义标签; 4)上传图片到项目也是封装好了工具类; 5)在线支付调用易宝的支付接口; 6)自定义拦截器对为登陆用户进行拦截; 7)复杂的业务在于一个景点对应多个门票,想要门票显示在对应...

    Jsp实验1

    【Jsp实验1】——构建动态网页的基石 在网页开发的世界里,JavaServer Pages(JSP)是一种强大的技术,它允许开发者将静态内容与动态数据结合起来,创建交互式的Web应用。"Jsp实验1"是初学者踏入JSP领域的第一步,...

Global site tag (gtag.js) - Google Analytics