`
wangyalei
  • 浏览: 53747 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

自定义标签(二)分页标签

阅读更多

创建和使用一个标签的具体步骤如下:

  1. 创建标签的处理类(Tag Handler Class)
  2. 创建标签库描述文件(Tag Library Descrptor File)
  3. 在web.xml文件中配置元素
  4. 在jsp文件中引入标签库
import javax.servlet.http.HttpServletRequest;
/*****
 * 
 * @author wangyalei
 * 
 */
public class Pager {
	
	private int totalRows; // 数据总行数
	private int pageSize = 5;// 每页显示的行数
	private int currentPage; // 当前页号
	private int totalPages; // 总页数
	private int startRow;// 当前页在数据库中的起始行
	private String strUrl;// 出现[1][2][3][4]所用
	private int startPage;// 起始页码��
	private int endPage;// 结束页码��
	private boolean hasPreviousPage = false;// 上一页是否显示
	private boolean hasNextPage = false;// 下一页是否显示

	// 构造函数 总数
	// 对各个变量进行初始设置
	public Pager(int _totalRows) {
		totalRows = _totalRows;// 数据数量
		totalPages = totalRows / pageSize;// 页数
		if (totalRows % pageSize > 0) {
			totalPages++;
		}
		currentPage = 1;
		startRow = 0;
		if (totalPages > currentPage) {
			hasNextPage = true;
		}
		startPage = 1;
		// 当数据库中数据小于十页时
		if (totalPages < 10) {
			endPage = totalPages;
		} else {
			endPage = 10;
		}
	}

	public Pager() {
	}

	// 以下为类中字段的GET,SET访问器
	public int getStartRow() {
		return startRow;
	}

	public int getTotalPages() {
		return totalPages;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setTotalRows(int totalRows) {
		this.totalRows = totalRows;
	}

	public void setStartRow(int startRow) {
		this.startRow = startRow;
	}

	public void setTotalPages(int totalPages) {
		this.totalPages = totalPages;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

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

	public int getTotalRows() {
		return totalRows;
	}

	public boolean getHasNextPage() {
		return hasNextPage;
	}

	public void setHasNextPage(boolean hasNextPage) {
		this.hasNextPage = hasNextPage;
	}

	public boolean getHasPreviousPage() {
		return hasPreviousPage;
	}

	public void setHasPreviousPage(boolean hasPreviousPage) {
		this.hasPreviousPage = hasPreviousPage;
	}

	public String getStrUrl() {
		return strUrl;
	}

	public void setStrUrl(String strUrl) {
		this.strUrl = strUrl;
	}

	public int getEndPage() {
		return endPage;
	}

	public void setEndPage(int endPage) {
		this.endPage = endPage;
	}

	public int getStartPage() {
		return startPage;
	}

	public void setStartPage(int startPage) {
		this.startPage = startPage;
	}

	/*
	 * 方法名:previous 方法参数:空 方法返回值类型:void 方法功能:向上翻一页
	 */
	public void previous() {
		currentPage--;
		if (totalPages <= 10) {
			startPage = 1;
			endPage = totalPages;
		} else if (totalPages > 10 && totalPages <= 20) {
			startPage = 1;
			endPage = currentPage + 9 > totalPages ? totalPages
					: currentPage + 9;
		} else {
			if (currentPage <= 11) {
				startPage = 1;
				endPage = currentPage + 9;
			}
			if (currentPage > 11) {
				startPage = currentPage - 10;
				endPage = currentPage + 9;
			}
			if (currentPage + 9 >= totalPages) {
				startPage = totalPages - 19;
				endPage = totalPages;
			}
		}
		if (currentPage == 1) {
			hasPreviousPage = false;
		} else {
			hasPreviousPage = true;
		}
		if (currentPage == totalPages) {
			hasNextPage = false;
		} else {
			hasNextPage = true;
		}

		startRow = (currentPage - 1) * pageSize;
	}

	/*
	 * 方法名:next 方法参数:空 方法返回值类型:void 方法功能:向下翻一页
	 */
	public void next() {

		currentPage++;

		if (totalPages <= 10) {
			startPage = 1;
			endPage = totalPages;
		} else if (totalPages > 10 && totalPages <= 20) {
			startPage = 1;
			endPage = currentPage + 9 > totalPages ? totalPages
					: currentPage + 9;
		} else {
			if (currentPage <= 11) {
				startPage = 1;
				endPage = currentPage + 9;
			}
			if (currentPage > 11) {
				startPage = currentPage - 10;
				endPage = currentPage + 9;
			}
			if (currentPage + 9 >= totalPages) {
				startPage = totalPages - 19;
				endPage = totalPages;

			}
		}
		if (currentPage == 1) {
			hasPreviousPage = false;
		} else {
			hasPreviousPage = true;
		}
		if (currentPage == totalPages) {
			hasNextPage = false;
		} else {
			hasNextPage = true;
		}
		startRow = (currentPage - 1) * pageSize;
	}

	/*
	 * 方法名:getMyUrl 方法参数:空 方法返回值类型:void 方法功能:生成字符串送往客户端
	 */

	public void getMyUrl(String url) {

		StringBuffer myUrl = new StringBuffer();
		for (int i = startPage; i <= endPage; i++) {
			myUrl.append("<a href=" + url + "&currentPage=" + i
					+ "&totalPages=" + this.getTotalPages() + ">[" + i
					+ "]</a>");
		}
		strUrl = myUrl.toString();
	}

	/*
	 * 方法名:refresh 方法参数:int 方法返回值类型:void 方法功能:根据参数跳到指定页
	 */
	public void refresh(int _currentPage) {

		currentPage = _currentPage;
		if (totalPages <= 10) {
			startPage = 1;
			endPage = totalPages;
		} else if (totalPages > 10 && totalPages <= 20) {
			startPage = 1;
			endPage = currentPage + 9 > totalPages ? totalPages
					: currentPage + 9;
		} else {
			if (currentPage <= 11) {
				startPage = 1;
				endPage = currentPage + 9;
			}
			if (currentPage > 11) {
				startPage = currentPage - 10;
				endPage = currentPage + 9;
			}
			if (currentPage + 9 >= totalPages) {
				startPage = totalPages - 19;
				endPage = totalPages;
			}
		}
		if (currentPage == 1) {
			hasPreviousPage = false;
		} else {
			hasPreviousPage = true;
		}
		if (currentPage == totalPages) {
			hasNextPage = false;
		} else {
			hasNextPage = true;
		}
		startRow = (currentPage - 1) * pageSize;
	}

	public static Pager getPager(HttpServletRequest request, String url) {
		Pager pager = new Pager();
		pager.setCurrentPage(Integer.parseInt(request
				.getParameter("currentPage")));
		pager.setTotalPages(Integer
				.parseInt(request.getParameter("totalPages")));
		if (!StrUtil.isNull(request.getParameter("pageroperation"))) {
			if (StrUtil.isEqual(request.getParameter("pageroperation")
					.toString(), "previous")) {
				pager.previous();
				pager.getMyUrl(url);
			} else if (StrUtil.isEqual(request.getParameter("pageroperation")
					.toString(), "next")) {
				pager.next();
				pager.getMyUrl(url);
			}
		} else {
			pager.refresh(Integer.parseInt(request.getParameter("currentPage")
					.toString()));
			pager.getMyUrl(url);
		}
		return pager;
	}
}
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import com.handson.service.util.Pager;
/**********************
 * 
 * @author wangyalei
 *
 */
public class PaginationTag extends TagSupport {
	
	public int doStartTag() throws JspException {
		try {
			HttpServletRequest request = (HttpServletRequest) pageContext
					.getRequest();
			JspWriter out = pageContext.getOut();
			StringBuffer urlStr = new StringBuffer();
			if (StrUtil.isEqual(this.getHasPreviousPage(), "true")) {
				urlStr.append("<a href='");
				urlStr.append(action);
				urlStr.append("&pageroperation=previous&currentPage="+((Pager)request.getAttribute("page")).getCurrentPage()+"&totalPages="+((Pager)request.getAttribute("page")).getTotalPages()+"'>上一页</a>");
			}
			urlStr.append(url);
			if (StrUtil.isEqual(this.getHasNextPage(), "true")) {
				urlStr.append("<a href='");
				urlStr.append(action);
				urlStr.append("&pageroperation=next&currentPage="+((Pager)request.getAttribute("page")).getCurrentPage()+"&totalPages="+((Pager)request.getAttribute("page")).getTotalPages()+"'>下一页</a>");
			}
			
			out.print(urlStr);
		} catch (java.io.IOException e) {
			throw new JspTagException(e.getMessage());
		}

		return SKIP_BODY;
	}

	private String url;
	private String action;
	private String hasPreviousPage;
	private String hasNextPage;

	public String getHasPreviousPage() {
		return hasPreviousPage;
	}

	public void setHasPreviousPage(String hasPreviousPage) {
		this.hasPreviousPage = hasPreviousPage;
	}

	public String getHasNextPage() {
		return hasNextPage;
	}

	public void setHasNextPage(String hasNextPage) {
		this.hasNextPage = hasNextPage;
	}

	public String getAction() {
		return action;
	}

	public void setAction(String action) {
		this.action = action;
	}

	public String getUrl() {
		return url;
	}

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

 

<?xml version="1.0" encoding="UTF-8"?>
<taglib>
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>

	<tag>
	     <!-- 设定Tag的名字  -->
		<name>pagination</name>
		<!-- 设定Tag的处理类  -->
		<tag-class>com.tag.service.util.PaginationTag</tag-class>
		<!-- 表示标签中没有body  -->
		<body-content>empty</body-content>
		<attribute>
		        <!-- name:属性名称  -->
			<name>url</name>
				<!-- required:属性是否必需的,默认为false  -->
			<required>true</required>
		        <!-- rtexprvalue:属性值是否可以为request-time表达式,也就是类似于<%=…%>的表达式 默认为false -->
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>action</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>hasPreviousPage</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>hasNextPage</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>
 

 

<%@ page language="java" contentType="text/html; charset=gbk"
    pageEncoding="gbk"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="/WEB-INF/Pagination.tld" prefix="p" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>系统帐户管理</title>
</head>
 <body>
<span class="STYLE1">系统参数</span><span class="STYLE5"><strong>|</strong><span class="STYLE3">系统帐户管理</span></span>
<form id="form1" name="form1" method="post" >
 <p:pagination url="${page.strUrl}" action="appUserManager.do?method=init" 
      hasPreviousPage="${page.hasPreviousPage}" hasNextPage="${page.hasNextPage}"/>
  </body>
</html>

 在jsp引擎遇到自定义标签的起始标志,就会调用doStartTag()方法,doStartTag()方法返回一个整数值,用来决定程序的后续流程。

 

  • Tag.SKIP_BODY :表示标签之间的内容被忽略
  • Tag.EVAL_BODY_INCLUDE:表示标签之间的内容正常执行

在jsp引擎遇到自定义标签的结束标志,就会调用doEndTag()方法,doStartTag()方法返回一个整数值,用来决定程序的后续流程。

  • Tag.SKIP_PAGE:表示立刻停止执行网页,网页尚未处理的静态内容与jsp程序均被忽略任何已有的输出的内容立刻返回到客户的浏览器上
  • tag_EVAL_PAGE:表示按照正常的流程继续执行jsp网页

一个标签处理类可以通过javax.servlet.jsp.PageContext与jsp交互,通过javax.servlet.jsp.PageContext类,标签处理类就可以访问jsp中的request,session和application对象

分享到:
评论

相关推荐

    java分页标签自定义分页标签自定义分页标签

    自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签...

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

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

    自定义标签实现的分页

    本篇文章将详细讲解如何利用Hibernate框架的自定义标签来实现分页功能,供开发者们参考和借鉴。 首先,我们要了解Hibernate的基本概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发人员使用面向对象...

    自定义分页标签

    自定义的漂亮分页标签,支持上下翻页,直接跳转指定页

    自定义标签分页

    5. **在JSP页面中使用自定义标签**:在JSP页面上引入自定义标签库,然后使用自定义的分页标签,传入必要的参数,如当前页码、总页数等。 ```jsp ... ${currentPage}" totalPages="${totalPages}" /&gt; ``` 6. **...

    基于struts2 自定义标签 分页

    在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...

    简单易用的自定义标签分页显示

    //得到分页米尺数值 sb.append("function getMaxNum(){"); sb.append("var val=document.getElementById('onePageMaxNum').value;"); sb.append("if(val=='') return "+measurement+";"); sb.append(" return ...

    一个用于分页的自定义标签

    1. **标签库描述符(TLD)**:在TLD文件中,开发者会声明这个分页标签,包括标签的名字、属性(如当前页数、总页数等)、以及指向标签处理类的引用。 ```xml &lt;name&gt;paging &lt;tag-class&gt;...

    强大的自定义标签分页,内有说明

    "强大的自定义标签分页"是指通过自定义JSP标签来实现灵活、高效的分页功能。这种方式可以提供更高的定制性,使得开发者可以根据项目需求进行个性化的设计和调整。 首先,我们来了解自定义标签。在Java Web开发中,...

    java自定义标签分页

    在这个“java自定义标签分页”主题中,我们将深入探讨如何利用自定义标签来实现高效且易于维护的分页功能。 首先,自定义标签的定义通常涉及以下组件: 1. TLD(Tag Library Descriptor)文件:这是定义自定义标签...

    这是一个自定义标签和分页结合的例子,很实用的,灵活性高啊

    在IT行业中,自定义标签(Custom Tags)和分页(Pagination)是两个常见的技术概念,它们在构建高效、用户友好的Web应用程序时起着至关重要的作用。本示例结合了这两个概念,提供了一种灵活且可重用的解决方案。 ...

    jsp java自定义标签 实现分页 当前位置标签

    要创建一个分页标签,我们需要: 1. 定义标签接口:在TLD(Tag Library Descriptor)文件中声明自定义标签,包括标签名、属性、导出的Java类等信息。 2. 编写标签实现类:继承`BodyTagSupport`,并覆盖必要的方法,...

    Struts2自定义分页标签

    4. **创建分页标签库**:Struts2支持自定义标签,你可以创建一个`.tld`文件来定义分页标签。标签库应该包含开始、结束、上一页、下一页等标签,以便在视图层中方便地使用。 5. **实现标签处理类**:对应的Java类...

    hibernate + 自定义标签分页

    本例中,我们探讨的是如何结合Struts、Hibernate和自定义标签实现分页功能,这是一种常见的优化用户界面体验的技术,特别是对于数据量大的查询结果。 1. **分页原理** 分页的基本思想是将大量数据分成多个小部分,...

    jsp自定义分页标签

    二、创建自定义分页标签 1. **编写Tag Handler类** 分页标签的处理类通常需要实现`javax.servlet.jsp.tagext.Tag`接口或者其子接口,如`javax.servlet.jsp.tagext.SimpleTag`。在这个类中,你需要实现处理分页逻辑...

    java+hibernate+jsp+tld+自定义标签分页

    本项目结合了Java、Hibernate、JSP以及TLD(Tag Library Descriptor)技术,实现了一个高效、易懂且实用的自定义标签分页解决方案。下面我们将详细探讨这些技术以及它们在分页中的应用。 首先,Java作为后端编程...

    JSP自定义标签分页

    JSP自定义标签分页+Struts1.x标签,包含标签分页类、标签tld文件、web.xml配置和调用例子,非常地简单。 只要在Action传request.setAttribute("listUser", listUser);到JSP即可实现自动分页,输出分页样式可以自己去...

    自定义页面分页标签自定义页面分页标签

    自定义页面分页标签是指开发者根据项目需求,创建个性化的分页组件,以实现更加灵活、符合界面设计风格的分页功能。下面将详细探讨如何实现自定义页面分页标签及其相关的知识点。 1. **基础概念**: - 分页:将...

    jsp自定义标签编写的分页

    在JSP页面中,我们可以这样使用自定义分页标签: ```jsp ${messageCount}" currentPage="${currentPage}" /&gt; ``` 在这个例子中,`messageCount`和`currentPage`通常是从后台服务获取的数据,通过EL(Expression ...

Global site tag (gtag.js) - Google Analytics