Pager这个类是用来装载分页信息的.如当前是第几页,每一页有多少数据等等
package org.jksoft.pager;
public class Pager {
/**
* 用来控制分页信息.
* @author jackey
*
*/
private int currentPage;// 当前第几页
private int totalRows; // 一共有多少行数据
private int totalPages;// 总页数
private int pageSize = 10; // 一页有多少数据,默认为10
private boolean hasNext;// 是否有下一页
private boolean hasPrevious;// 是否有前一页
private boolean isLast;// 当前页 是否是最后一页
public Pager() {
this.currentPage = 1; // 初始化为第一页
}
public void init(int totalRows, int pageSize) {
if (pageSize != 0) { // 如果传过来的参数不为0才赋值,否则使用默认值
this.pageSize = pageSize;
}
if (totalRows != -1)//-1表示不传参数,只是调用init方法.
this.totalRows = totalRows;
this.hasPrevious = false;// 无上一页
if (this.totalRows % this.pageSize == 0) {
this.totalPages = this.totalRows / this.pageSize;
} else {
this.totalPages = this.totalRows / this.pageSize + 1;
}// 计算页数
refresh();
}
/**
* 根据参数判断是否有上一页,下一页,尾页等等.
* 刷新用.
* @author jackey
*/
public void refresh() {
if (currentPage == 1) {
this.hasPrevious = false;
}
if (currentPage > 1) {// 当前页大于1,有上一页,首页
this.hasPrevious = true;
}
if (this.totalPages > this.currentPage) {// 如果页数大于当前页 则有下一页 和尾页
this.hasNext = true;
this.isLast = false;
}
if (this.totalPages == this.currentPage) {// 如果总页数等于当前页,那么是最后一页
this.isLast = true;
this.hasNext = false;
}
if (this.totalPages < this.currentPage) {// 如果当前页
return;
}
}
//是否首页
public boolean isFirstPage(){
if(this.currentPage == 1){
return true;
}
return false;
}
//是否最后一页.
public boolean isLastPage(){
if(this.isLast){
return true;
}
return false;
}
//首页,当前页码 = 1
public void first(){
this.currentPage = 1;
refresh();
}
//下一页,当前页码 + 1;
public void next(){
this.currentPage += 1;
if(this.currentPage >= this.totalPages){
this.currentPage = this.totalPages;
}
refresh();
}
//上一页,当前页码 - 1
public void previous(){
this.currentPage -= 1;
if(this.currentPage <= 0){
this.currentPage = 1;
}
refresh();
}
//尾页,当前页码等于总页数
public void last(){
this.currentPage = this.totalPages;
refresh();
}
public int getCurrentPage() {
return currentPage;
}
//设置了当前页后要修改参数.
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
refresh();
}
//获取总行数 .
public int getTotalRows() {
return totalRows;
}
//修改总行数,要重新计算总页数,以及其他参数.
public void setTotalRows(int totalRows) {
this.init(totalRows, 0);
}
//获取总页数
public int getTotalPages() {
return totalPages;
}
//获得页大小
public int getPageSize() {
return pageSize;
}
//获得 "是否 有下一页"
public boolean isHasNext() {
return this.hasNext;
}
//获得是否有上一页
public boolean isHasPrevious() {
return this.hasPrevious;
}
//是否最后一页.
public boolean isIsLast() {
return this.isLast;
}
}
------------------------------------------------------------------
PagerHelp是用来从session中取Pager的.如果没有则new一个.
package org.jksoft.pager;
import javax.servlet.http.HttpServletRequest;
public class PagerHelp {
public static Pager getPager(HttpServletRequest request, int totalRows,
int pageSize) {
Pager pager = null;
Object obj= request.getSession().getAttribute("_pager");
if (obj == null) {
pager = new Pager();
pager.init(totalRows, pageSize);
}else
pager = (Pager)obj;
String page = "";//request.getParameter("page");
// page = page.trim().toLowerCase();
if (page == null || "".equals(page) || "first".equals(page)) {
pager.first();
} else if ("previous".equals(page)) {
pager.previous();
} else if ("next".equals(page)) {
pager.next();
} else if ("last".equals(page)) {
pager.last();
}
return pager;
}
}
PagerTag用来显示标签.
package org.jksoft.pager;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class PagerTag extends BodyTagSupport {
String url;
String page;
Pager pager;
String forward;
int total;
int size;
public int doStartTag() throws JspException {
HttpServletRequest request = (HttpServletRequest) pageContext
.getRequest();
System.out.println(total + " --------- " + size);
// 取pager.保存分页信息的类.
pager = PagerHelp.getPager(request, total, size);
// out对象
JspWriter out = pageContext.getOut();
pager.setCurrentPage(6);
try {
out.println("<style type='text/css'>" + "<!--"
+ "a:link { text-decoration: none;color: blue}"
+ "a:active { text-decoration:blink}"
+ "a:hover { text-decoration:underline;color: red}"
+ "a:visited { text-decoration: none;color: green}" + "-->"
+ "</style>");
if (pager.isHasNext() && pager.isHasPrevious()) {
// 中间某页
System.out.println("if");
out.println("<a href='" + forward + "' page='first'>首页</a>");
out.println("<a href='" + forward + "' page='next'>下一页</a>");
out
.println("<a href='" + forward
+ "' page='previous'>上一页</a>");
out.println("<a href='" + forward + "' page='last'>尾页</a>");
} else if (pager.isFirstPage() && pager.isHasNext()) {
// 首页,有下一页
System.out.println("else if 1");
out.println("<a href='#' page='first'>首页</a>");
out.println("<a href='" + forward + "' page='next'>下一页</a>");
out.println("<a href='#' page='previous'>上一页</a>");
out.println("<a href='" + forward + "' page='last'>尾页</a>");
} else if (pager.isHasPrevious() && pager.isIsLast()) {
// 最后一页有上一页
System.out.println("else if 2");
out.println("<a href='" + forward + "' page='first'>首页</a>");
out.println("<a href='#' page='next'>下一页</a>");
out
.println("<a href='" + forward
+ "' page='previous'>上一页</a>");
out.println("<a href='#' page='last'>尾页</a>");
} else {
System.out.println("else");
out.println("<a href='#' page='first'>首页</a>");
out.println("<a href='#' page='next'>下一页</a>");
out.println("<a href='#' page='previous'>上一页</a>");
out.println("<a href='#' page='last'>尾页</a>");
}
out.println("<font color='green'> 共有 " + pager.getTotalRows()
+ " 条数据 当前第 "
+ pager.getCurrentPage() + "页 / 共 "
+ pager.getTotalPages() + " 页</font>");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.getSession().setAttribute("_pager", pager);
return EVAL_BODY_INCLUDE;
}
public int doAfterBody() throws JspException {
return SKIP_BODY;
}
public int doEndTag() throws JspException {
return SKIP_PAGE;
}
public void doInitBody() throws JspException {
super.doInitBody();
}
public void setBodyContent(BodyContent b) {
// TODO Auto-generated method stub
super.setBodyContent(b);
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
-------------------------------------------------------------------
编写tld文件,
<?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"
xmlns:shcemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<description>自定义标签</description>
<display-name>JSTL core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>firstLabel</short-name>
<uri>http://java.sun.com/jsp/jstl/core</uri>
<tag>
<name>LittlePager</name>
<tag-class>org.jksoft.pager.PagerTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>total</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>size</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
--------------------------------------------------------------
在页面里
<%@taglib uri="/WEB-INF/pager.tld" prefix = "pager" %>
<pager:LittlePager total="100" size="5"></pager:LittlePager>
引入标签并使用就可以了.
可能有许多地方不正确,欢迎指正
分享到:
相关推荐
自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签...
4. **创建分页标签库**:Struts2支持自定义标签,你可以创建一个`.tld`文件来定义分页标签。标签库应该包含开始、结束、上一页、下一页等标签,以便在视图层中方便地使用。 5. **实现标签处理类**:对应的Java类...
标题提到的“牛人写的分页程序,分页标签”很可能是指一个高效且易用的分页解决方案,可能是基于Java开发的,特别是利用了自定义标签(Custom Tags)这一特性。 Java自定义标签(Custom Tags)是JSP(JavaServer ...
自定义页面分页标签是指开发者根据项目需求,创建个性化的分页组件,以实现更加灵活、符合界面设计风格的分页功能。下面将详细探讨如何实现自定义页面分页标签及其相关的知识点。 1. **基础概念**: - 分页:将...
如果你想要创建自己的分页标签库,可以遵循以下步骤: 1. 定义Tag类:实现Tag接口或继承TagSupport,实现分页逻辑。 2. 创建TEI类:提供关于自定义标签的元数据。 3. 编写TLD文件:定义标签库的结构和标签信息。 4. ...
本主题将深入探讨“jsp自定义分页标签”,这是一种在网页展示大量数据时非常实用的功能,它可以有效地帮助用户浏览和操作数据。 一、JSP自定义标签基础 JSP自定义标签是JSP技术的一部分,它允许开发者创建自己的...
Java分页标签是Java Web开发中的一个重要概念,它主要用于处理大量数据的展示,尤其是在数据库查询结果需要在网页上以多页形式呈现时。这个技术可以让用户更方便地浏览和导航大量的信息,而不会一次性加载所有数据...
本资源提供了一个非常好用的JSP分页标签,它简化了在JSP页面上实现分页的过程,无需编写过多的Java代码,只需在JSP页面上插入特定的标签即可。 1. **JSP分页标签**:JSP分页标签是一种预定义的、可重用的组件,可以...
总的来说,"好用的分页标签"是一个方便JSP开发者的工具,它通过提供预设的分页标签,使得在网页中实现分页功能变得简单而直观。无论是对于新手还是经验丰富的开发者,这样的组件都能提高开发速度并增强项目的用户...
本项目提供了一个基于JSP的分页标签组件,名为"PaperTag",旨在简化开发过程,提高代码可读性和可维护性。 分页标签组件的工作原理是通过自定义TLD(Tag Library Descriptor)文件,定义标签行为,并在JSP页面中...
自己写的java分页标签,一次显示10页,当前页数居中 1.2.3.4.5.6.7.8.9.10这样的分页,并且可以设置一页显示的条数,有转到多少页的功能。。。用法在txt文档里写出来了,并且提供了一个jquery包,因为要用到jquery包
`pager-taglib`是Java Web开发中常用的分页标签库,它简化了在JSP页面上实现分页功能的过程。这个标签库通常与Spring MVC、Struts2等框架结合使用,提供了一种声明式的方式来展示数据分页。下面将详细解释`pager-...
JSP自定义分页标签,mysql数据库,通过导入jar包,使用标签的方式实现分页的功能。
`pager-taglib`是一个专为JSP页面设计的分页标签库,它简化了在JSP中实现分页的过程。下面将详细介绍`pager-taglib`的安装、使用方法以及其核心知识点。 ### 1. `pager-taglib`简介 `pager-taglib`是一个开源的JSP...
Java自定义分页标签是Java Web开发中一种高效、可复用的方法,它允许开发者创建自己的标签库,用于处理分页逻辑,提高代码的可读性和可维护性。本篇文章将详细探讨如何在Java中实现一个自定义分页标签。 首先,理解...
本篇内容主要介绍了一个简单的分页标签的实现过程,这是一个很好的学习实践,帮助开发者理解和掌握自定义标签的编写与应用。 首先,我们要理解自定义标签的生命周期和组成部分。一个完整的自定义标签通常包含以下...
标题提到的是一个由Java编写的自定义分页标签,它允许开发者在JSP页面上方便地实现分页效果。下面将详细介绍这个分页标签的工作原理、使用方法以及可能涉及到的相关技术。 分页标签通常是基于Servlet和JSP的Web应用...
本教程将详细讲解如何使用JSP(JavaServer Pages)技术来实现一个通用的分页标签,以便在各种项目中复用。 首先,JSP是Java平台上的动态网页技术,它允许开发人员在HTML或者XML文档中嵌入Java代码。在分页场景下,...
在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...