`
myhongkongzhen
  • 浏览: 96993 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

类似GOOGLE,BAIDU的WEB应用PAGE分页标签JAVA实现

    博客分类:
  • J2EE
阅读更多

 

 

2009年5月9号  星期六  天气晴

 

以下是应用JSP标签实现的WEB应用的分页功能的代码

 

 

 核心代码如下:

 

Tag代码:

package g.cms.web.tag;

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

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
 * @author Jane(吴贞贞)
 * @email myhongkongzhen@gmail.com
 * @since JDK 1.6
 * @alter 2009年5月9号
 * @version 1.0 2009年3月**号
 */
public class PageForCMSTag2 extends BodyTagSupport {
	private static final long serialVersionUID = -4247241487535299862L;

	private String indexColor = "";

	private String countColor = "";

	// private String navigationUrl = "";
	private int pageSize = 10;// 每页显示记录个数

	private int pageIndex = 0;
	private String action;// 请求路径

	// private int pageCount;

	// 自定义参数
	// private String params = "";
	public String getAction() {
		return action;
	}

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

	/**
	 * getPageCount()返回总页数
	 */
	protected int getPageCount() {
		return getRecordCount() % getPageSize() != 0 ? (getRecordCount() / getPageSize()) + 1
				: (getRecordCount() / getPageSize());
	}

	public int getPageIndex() {
		String pi = this.pageContext.getRequest().getParameter("pageIndex");
		if (null == pi || ("").equals(pi.trim())) {
			pageIndex = 0;
		} else {
			pageIndex = Integer.parseInt(pi);
		}
		return pageIndex;
	}

	public void setPageIndex(int pageIndex) {
		this.pageIndex = pageIndex;
	}

	private void firstPage(JspWriter out) throws IOException {
		if (getPageIndex() == 0) {
			out.println("<span>[首页]</span>");
		} else {
			out.println("<a href='" + goToPageURI(0) + "'>[首页]</a>");
		}
	}

	private void lastPage(JspWriter out) throws IOException {
		if (getPageIndex() == getPageCount() - 1) {
			out.println("<span>[末页]</span>");
		} else {
			out.println("<a href='" + goToPageURI(getPageCount() - 1)
					+ "'>[末页]</a>");
		}
	}

	private void previousPage(JspWriter out) throws IOException {
		if (getPageIndex() < 1) {
			out.println("<span>[上一页]</span>");
		} else {
			out.println("<a href='" + goToPageURI(getPageIndex() - 1)
					+ "'>[上一页]</a>");
		}
	}

	private void nextPage(JspWriter out) throws IOException {
		if (getPageIndex() >= getPageCount() - 1) {
			out.println("<span>[下一页]</span>");
		} else {
			out.println("<a href='" + goToPageURI(getPageIndex() + 1)
					+ "'>[下一页]</a>");
		}
	}

	@Override
	public int doStartTag() throws JspException {
		// 获取url
		// 设置显示页数的颜色
		getColor();
		StringBuffer strb = new StringBuffer();
		JspWriter out = pageContext.getOut();
		try {
			// 分页
			int front = getPageIndex() - 5; // 前面一截
			int back = getPageIndex() + 5; // 后面一截
			out.println("共" + getPageCount() + "页 &nbsp;");
			out.println("当前第 <font color=" + indexColor + ">"
					+ (getPageIndex() + 1) + "</font>页");
			firstPage(out);
			previousPage(out);
			if (getPageIndex() < 5) // 如果索引在前5页
			{
				if (getPageCount() <= 10) // 总页数不够10页
				{
					for (int i = 0; i < getPageCount(); i++) {
						if (i == getPageIndex())
							strb.append(" " + (getPageIndex() + 1) + " ");
						else
							strb.append("<a href=" + goToPageURI(i) + ">["
									+ (i + 1) + "]</a>");
					}
				} else {
					for (int i = 0; i < 9; i++) {
						if (i == getPageIndex())
							strb.append(" " + (getPageIndex() + 1) + " ");
						else
							strb.append("<a href=" + goToPageURI(i) + ">["
									+ (i + 1) + "]</a>");
					}
				}
			} else {
				if (front >= 1) {
					for (int i = 4; i > 0; i--)
						strb.append("<a href="
								+ goToPageURI(getPageIndex() - i) + ">["
								+ (getPageIndex() - (i - 1)) + "]</a>");
				} else {
					for (int i = 1; i < getPageIndex(); i++)
						strb.append("<a href=" + goToPageURI(i) + ">["
								+ (i + 1) + "]</a>");
				}

				strb.append(" " + (getPageIndex() + 1) + " "); // 分界线 eg: 5
				// // ,前面一截就是1234,后面一截就是6789

				if (back <= getPageCount()) {
					for (int i = 0; i < 4; i++)
						strb.append("<a href="
								+ goToPageURI(getPageIndex() + i + 1) + ">["
								+ (getPageIndex() + (i + 1) + 1) + "]</a>");
				} else {
					for (int i = 0; i < getPageCount() - getPageIndex() - 1; i++)
						strb.append("<a href="
								+ goToPageURI(getPageIndex() + i + 1) + ">["
								+ (getPageIndex() + (i + 1) + 1) + "]</a>");
				}
			}

			out.println(strb.toString());
			nextPage(out);
			lastPage(out);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return EVAL_PAGE;
	}

	/**
	 * @param page
	 *            :跳转到的页码
	 */
	protected String goToPageURI(int page) {
		String requestPath = ((HttpServletRequest) pageContext.getRequest())
				.getRequestURI();
		String rp = null;

		String tid = (String) ((HttpServletRequest) pageContext.getRequest())
				.getParameter("typeid");

		if (null != tid && !"".equals(tid)) {
			Integer typeid = Integer.parseInt(tid);

			if (null == action) {
				rp = requestPath
						+ (requestPath.lastIndexOf("?") == -1 ? "?" : "&")
						+ "pageIndex=" + page + "&pageSize=" + getPageSize()
						+ "&recordCount=" + getRecordCount() + "&typeid="
						+ typeid + "&typeid2=" + typeid;
			} else {
				rp = requestPath + action
						+ (action.lastIndexOf("?") == -1 ? "?" : "&")
						+ "pageIndex=" + page + "&pageSize=" + getPageSize()
						+ "&recordCount=" + getRecordCount() + "&typeid="
						+ typeid + "&typeid2=" + typeid;
			}
		} else {
			if (null == action) {
				rp = requestPath
						+ (requestPath.lastIndexOf("?") == -1 ? "?" : "&")
						+ "pageIndex=" + page + "&pageSize=" + getPageSize()
						+ "&recordCount=" + getRecordCount();
			} else {
				rp = requestPath + action
						+ (action.lastIndexOf("?") == -1 ? "?" : "&")
						+ "pageIndex=" + page + "&pageSize=" + getPageSize()
						+ "&recordCount=" + getRecordCount();
			}
		}

		return rp;
	}

	private void getColor() {
		if (indexColor.equals(""))
			indexColor = "red";
		if (countColor.equals(""))
			countColor = "blue";
	}

	public String getCountColor() {
		return countColor;
	}

	public void setCountColor(String countColor) {
		this.countColor = countColor;
	}

	public String getIndexColor() {
		return indexColor;
	}

	public void setIndexColor(String indexColor) {
		this.indexColor = indexColor;
	}

	public int getPageSize() {
		String ps = this.pageContext.getRequest().getParameter("pageSize");
		if (null == ps || "".equals(ps)) {
			pageSize = 20;
		} else {
			pageSize = Integer.parseInt(ps);
		}
		return pageSize;
	}

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

	private int recordCount;// 总记录个数
	private List<?> list;

	public List<?> getList() {

		List<?> l = (List<?>) this.pageContext.getRequest().getAttribute(
				"listPage");

		if (null == l || l.size() == 0) {
			return new ArrayList();
		} else {
			return l;
		}

	}

	public void setList(List<?> list) {
		this.list = list;
	}

	public int getRecordCount() {
		return getList().size();
	}

	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}

}

 

 

 

================================我是分割线============================

 

TLD标签定义代码:

<tag>
		<name>PageForCMSTag2</name>
		<tag-class>g.cms.web.tag.PageForCMSTag2</tag-class>
		<body-content>jsp</body-content>
		<attribute>
			<name>pageIndex</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<type>int</type>
			<description>当前的页数</description>
		</attribute>
		<attribute>
			<name>pageCount</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<description>总页数</description>
		</attribute>
		<attribute>
			<name>pageSize</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<description>URL</description>
		</attribute>
		<attribute>
			<name>action</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<description>url自定义参数</description>
		</attribute>
		<attribute>
			<name>indexColor</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<description>当前所在页的参数</description>
		</attribute>
		<attribute>
			<name>countColor</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<description>总页数的参数</description>
		</attribute>
	</tag>

 

 

===============================我是分割线============================

 

效果图如下:

 

PAGE

 

 PAGE

 

 

PAGE

 

 

 

  • 大小: 60.7 KB
  • 大小: 74.7 KB
  • 大小: 67.8 KB
  • 大小: 56.2 KB
分享到:
评论
1 楼 luo476979657 2010-01-26  
您好!我想问问,我在页面上如何传递参数到自定义标签里去呢??

相关推荐

    java类似于百度的分页小程序

    本项目是一个基于Java实现的类似百度分页功能的小程序,它结合了数据库操作,提供了完整的分页解决方案。在这个Demo中,我们可以学习到以下几个关键知识点: 1. **JDBC(Java Database Connectivity)**:Java访问...

    JSP实现类似百度,google的分页

    在这个主题中,我们将深入探讨如何使用Java Server Pages(JSP)技术来实现类似百度或Google的高效、美观的分页功能。这通常涉及到与后端Servlet的交互,以获取并展示所需的数据。 首先,我们需要了解JSP的基本原理...

    java自定义分页标签

    Java自定义分页标签是Java Web开发中一种高效、可复用的方法,它允许开发者创建自己的标签库,用于处理分页逻辑,提高代码的可读性和可维护性。本篇文章将详细探讨如何在Java中实现一个自定义分页标签。 首先,理解...

    Struts2分页-自定义标签-类似百度分页

    在这个场景中,我们提到的是使用自定义标签实现类似于百度分页的效果,这是一种常见的用户体验优化策略。百度的分页设计简洁明了,易于用户操作,因此在Web应用中广泛模仿。 首先,让我们了解一下Struts2框架。...

    java仿百度分页

    Java仿百度分页是一种常见的网页分页实现方式,它的核心思想是通过自定义标签库(JSP Tag Library)和Java后端代码配合,提供一种简洁、高效的分页展示方案。百度分页的设计考虑了用户体验和易用性,使得在大量数据...

    jsp仿百度、谷歌分页解决分页太多,始终显示一部分的页码

    本文将深入探讨如何使用JavaScript和jQuery实现一个类似百度、谷歌的智能分页解决方案,解决分页数量过多导致用户界面拥挤的问题。 首先,我们需要理解分页的基本原理。分页通常涉及到两个关键参数:每页显示的条目...

    类似淘宝 百度 谷歌的通用分页

    本知识点主要围绕“类似淘宝、百度、谷歌的通用分页”进行详细讲解。 首先,通用分页意味着该分页解决方案可以适用于多种数据库系统,例如Oracle、MSSQL2000和MySQL。Oracle是企业级的关系型数据库管理系统,广泛...

    仿百度分页jsp版

    本项目"仿百度分页jsp版"是一个基于Maven构建的Java Web应用,其目标是实现与百度网站类似的分页效果。下面将详细介绍该项目涉及的关键知识点。 首先,**分页** 是网页设计中的一种策略,它将大量数据分割成多个小...

    类似谷歌地图 web地图 图片拖动 百度地图 网页地图效果 MyMaps.rar

    在IT行业中,构建类似谷歌地图或百度地图的网页地图效果是一项常见的需求,这涉及到WebGIS(Web地理信息系统)技术的应用。本项目名为"MyMaps.rar",显然是一个包含资源的压缩包,旨在帮助开发者实现这样的功能。...

    类似百度地图的java实现

    总结,"类似百度地图的Java实现"项目综合运用了Java编程、SSH框架、百度地图API、数据库设计、前端技术、路线规划算法等多个IT领域的知识,旨在创建一个能够显示公交路线并提供换乘建议的实用工具。这个项目不仅提升...

    java模拟百度分页

    在Java编程中,模拟百度分页是一个常见的需求,特别是在处理大量数据时,为了提高用户体验,我们需要将结果分批次展示,这就是分页的核心理念。在这个场景中,`BaiDuDdividePage.java` 文件很可能是实现这个功能的一...

    类似百度的分页工具类,可直接用于项目开发

    本篇文章将详细讲解一个类似百度的分页工具类,以及如何将其应用于Hibernate分页,同时结合EL表达式和Struts2标签进行页面分页。 首先,"类似百度的分页工具类"是指设计一个具有类似百度搜索结果分页功能的Java类。...

    不错的Java经典分页

    首先,"仿谷歌分页"和"放百度分页"这两个标签暗示了我们可能会参考这两种著名搜索引擎的分页设计。谷歌和百度的分页通常简洁明了,不仅提供上一页、下一页的导航,还可能包含跳转至特定页码的功能。这种设计使得用户...

    JSP实现百度谷歌分页页码功能源代码

    本示例聚焦于使用JSP(Java Server Pages)来实现类似百度和谷歌的分页功能。下面将详细解释如何通过JSP来创建这种功能,以及涉及到的关键知识点。 首先,我们要理解JSP的基础。JSP是一种基于Java的服务器端脚本...

    java实现类似百度文库功能

    在Java中实现类似百度文库的功能,主要是为了提供在线阅读文档的能力,支持doc和pdf格式。这一过程涉及到多个步骤,包括文件的转换和展示。下面将详细介绍这些关键知识点。 首先,我们需要处理的是文件的转换。在...

    基于javaweb的仿照百度网盘做的小型云盘系统 .zip

    【标题】"基于javaweb的仿照百度网盘做的小型云盘系统"是一个使用Java Web技术实现的项目,旨在模仿百度网盘的功能,提供个人或小团队的在线存储服务。这个系统可能包括了文件上传、下载、分享、管理等功能,用户...

    仿百度分页代码 谷歌分页代码

    标题与描述中的“仿百度分页代码 谷歌分页代码”主要涉及的是网站开发中常见的分页功能实现。在大数据量的处理场景下,为了提升用户体验和服务器性能,分页显示数据成为了一种常见且必要的技术手段。本文将详细解析...

    java实现类似百度文库预览pdf功能文档

    "java实现类似百度文库预览pdf功能文档" Java实现类似百度文库预览PDF功能文档是指使用Java语言实现文档在线预览功能,类似于百度文库的预览功能。该功能可以将各种类型的文档(如Txt、Word、Excel、PPT等)转换为...

    google,baidu,bing网页搜索(java实现)

    其中google和baidu搜索采用http请求实现,bing使用bing java sdk实现。bing搜索需要一个微软的appid,可以用我的,也可以自己去免费申请。bing会限制每个appid的每天查询次数。 google和baidu的结果很好,bing的...

    asp 数字分页 仿百度分页 仿谷歌分页

    "asp 数字分页 仿百度分页 仿谷歌分页"这个项目的目标是实现一个与百度和谷歌分页样式类似的分页功能,同时具备数据库连接能力。 首先,我们来看`index.asp`,这是网站的主入口文件,通常包含了整个应用的逻辑控制...

Global site tag (gtag.js) - Google Analytics