`
mengdejun
  • 浏览: 408227 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jsp java分页标签

    博客分类:
  • Jav
阅读更多

java

package org.whvcse.common;

import java.io.Serializable;
/**
 * @desc 分页容器类
 * @author mengdejun 
 */
public class Page implements Serializable 
{
	private static final long serialVersionUID = 1L;
	private int allPage = 0;//总页数
	private int allRecords = 0;//总记录
	private int currentPage = 1;//当前页
	private String link = null;//链接信息
	private int perRecords = 5;//显示条数

	public int getAllPage() {
		return allPage;
	}

	public int getAllRecords() {
		return allRecords;
	}

	public int getCurrentPage() {
		return currentPage;
	}
	/**
     * 
     * @return 容器索引结束坐标
     */
	public int getEndIndex() {
		return ((this.currentPage - 1) * this.perRecords + this.perRecords > this.allRecords) ? this.allRecords
				: (this.currentPage - 1) * this.perRecords + this.perRecords;
	}

	public String getLink() {
		return link;
	}

	public int getPerRecords() {
		return perRecords;
	}
    /**
     * 
     * @return 容器索引开始坐标
     */
	public int getStartIndex() {
		return (this.currentPage - 1) * this.perRecords;
	}

	public boolean hasNext() {
		return this.currentPage < this.allPage;
	}

	public boolean hasPrevious() {
		return this.currentPage > 1;
	}

	public void setAllPage(int allPage) {
		this.allPage = (allPage % this.perRecords == 0) ? (allPage / this.perRecords)
				: (allPage / this.perRecords + 1);
	}

	public void setAllRecords(int allRecords) {
		this.allRecords = allRecords;
	}

	public void setCurrentPage(int currentPage) {
		if (currentPage < 1)
			this.currentPage = 1;
		else if (currentPage > this.allPage)
			this.currentPage = this.allPage;
		else
			this.currentPage = currentPage;
	}

	public void setCurrentPage(String currentPage) {
		if (null == currentPage || currentPage.equals(""))
			currentPage = "1";
		try {
			this.setCurrentPage(Integer.parseInt(currentPage));
		} catch (NumberFormatException e) {
			this.currentPage = 1;
		}
	}

	public void setLink(String link) {
		this.link = link;
	}

	public void setPerRecords(int perRecords) {
		this.perRecords = perRecords;
	}

	public void setPerRecords(String perRecords) {
		try {
			this.perRecords = Integer.parseInt(perRecords);
		} catch (NumberFormatException e) {
			this.perRecords = 5;
		}
	}
}

 

package org.whvcse.ext;
import java.io.Serializable;
import javax.servlet.ServletRequest;
import org.whvcse.common.Page;
/**
 * @desc 标签生成器接口 拓展生成器需实现该接口并返回链接字符串 
 * @author mengdejun
 */
public interface LinkHandler extends Serializable 
{
	/**
	 * 
	 * @param page 分页类信息
	 * @param request httpServletRequest对象封装
	 * @param format 链接信息格式化
	 * @param param 当前分页标签变量
	 * @return 链接字符串
	 * @throws NullPointerException
	 */
	public String parse(Page page,ServletRequest request,String format,String param) throws NullPointerException;
}

 

package org.whvcse.ext.link;

import javax.servlet.ServletRequest;

import org.whvcse.common.Page;
import org.whvcse.ext.LinkHandler;
/**
 * @desc 默认链接生成器,该类需自己扩展以实现自己的样式,需实现LinkHandler接口,自定义时候请在标签cls属性填入类的全名
 * @author mengdejun
 */
public class GeneralLinkHandler implements LinkHandler
{
	private static final long serialVersionUID = 1L;
	public String parse(Page page,ServletRequest request,String format,String param) throws NullPointerException 
	{
		String returnStr="共"+page.getAllPage()+"页,第"+page.getCurrentPage()+"页&nbsp;";
		for(int i=1;i<=page.getAllPage();i++)
		{
			returnStr+="<a href=index.jsp?"+param+"="+i+">"+i+"</a>&nbsp;";
		}
		return returnStr;
	}
}

 

package org.whvcse.page;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import org.whvcse.ext.LinkHandler;
public class TagLink extends TagSupport 
{
	private static final long serialVersionUID = 1L;
	private TagPage page=null;//父容器
	private String format="共{allPage},第{currentPage}";//链接格式,可自定义
	private LinkHandler handler=null;//链接处理类
	private String var=null;//返回信息
	private String cls="org.whvcse.ext.link.GeneralLinkHandler";//默认链接类
	@SuppressWarnings({ "static-access", "unchecked" })
	@Override
	public int doEndTag() throws JspException
	{
		//获取父容器标签对象
		this.page=(TagPage) this.findAncestorWithClass(this,TagPage.class);
		JspWriter out=this.pageContext.getOut();
		try 
		{
			Class c = Class.forName(this.cls);//插件设置,加载自定义插件类
			this.handler=(LinkHandler) c.newInstance();
			String temp=this.handler.parse(this.page.getPage(),pageContext.getRequest(),this.format,this.page.getParam());
			if(null==this.var)
			{
				out.println(temp);
			}
			else
			{
				this.pageContext.setAttribute(this.var,temp,this.page.getScope(this.page.getScope()));
			}
		} catch (ClassNotFoundException e1) {
			e1.printStackTrace();
		}
		catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return EVAL_PAGE;
	}
	public String getFormat() 
	{
		return format;
	}
	public void setFormat(String format) {
		this.format = format;
	}
	public String getCls() {
		return cls;
	}
	public void setCls(String cls) {
		this.cls = cls;
	}
	public String getVar() {
		return var;
	}
	public void setVar(String var) {
		this.var = var;
	}
	
	
}

 

package org.whvcse.page;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.whvcse.common.Page;
public class TagPage extends BodyTagSupport 
{
	private static final long serialVersionUID = 1L;
	private String id=null;//数据源ID
	private String target=null;//目标源,处理后的链表
	private String scope=null;//变量作用域
	private String param=null;//当前页标签变量
	@SuppressWarnings("unchecked")
	private List list=null;
	private Page page=null;//分页类
	private String rows="5";//显示行数
	public TagPage()
	{
		this.scope="request";
		this.param="page";
		this.target="pageData";
	}
	@Override
	public int doEndTag() throws JspException 
	{
		super.pageContext.removeAttribute(this.id, this.getScope(this.scope));
		return EVAL_PAGE;
	}
	@SuppressWarnings("unchecked")
	@Override
	public int doStartTag() throws JspException 
	{
		this.list=(List) super.pageContext.getAttribute(this.id,this.getScope(this.scope));
		this.page=new Page();
		this.page.setAllRecords(this.list.size());
		this.page.setPerRecords(this.rows);
		this.page.setAllPage(this.list.size());
		String start=super.pageContext.getRequest().getParameter(this.param);
		this.page.setCurrentPage(start);
		this.list=this.list.subList(this.page.getStartIndex(),this.page.getEndIndex());
		super.pageContext.setAttribute(this.target, this.list, this.getScope(this.scope));
		return EVAL_BODY_INCLUDE;
	}

	public String getId() 
	{
		return id;
	}
	public void setId(String id) 
	{
		this.id = id;
	}
	public String getTarget() 
	{
		return target;
	}
	public void setTarget(String target) 
	{
		this.target = target;
	}
	public String getScope() {
		return scope;
	}
	public void setScope(String scope) {
		this.scope = scope;
	}
	public String getParam() {
		return param;
	}
	public void setParam(String param) {
		this.param = param;
	}
	@SuppressWarnings("static-access")
	public int getScope(String scope)
	{
		if(scope.equals("request")||scope.equals("REQUEST")||scope.equals("r"))return super.pageContext.REQUEST_SCOPE;
		if(scope.equals("session")||scope.equals("SESSION")||scope.equals("s"))return super.pageContext.SESSION_SCOPE;
		if(scope.equals("application")||scope.equals("APPLICATION")||scope.equals("a"))return super.pageContext.APPLICATION_SCOPE;
		if(scope.equals("page")||scope.equals("PAGE")||scope.equals("p"))return super.pageContext.PAGE_SCOPE;
		return super.pageContext.REQUEST_SCOPE;
	}
	public String getRows() 
	{
		return rows;
	}
	public void setRows(String rows) 
	{
		this.rows = rows;
	}
	public Page getPage() 
	{
		return page;
	}	
	
}

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
 <tlib-version>1.3</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>whvcse</short-name>
 <uri>http://mengdejun.iteye.com</uri>
 <tag>
  <name>page</name>
  <tag-class>org.whvcse.page.TagPage</tag-class>
  <body-content>JSP</body-content>
  <description/>
  <attribute>
   <name>scope</name>
   <rtexprvalue>true</rtexprvalue>
   <description>
         分页类
         </description>
  </attribute>
   <attribute>
   <name>param</name>
    <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
           页码
         </description>
  </attribute>
   <attribute>
   <name>rows</name>
    <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
          显示行数
         </description>
  </attribute>
  <attribute>
   <name>id</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
          变量列表
         </description>
  </attribute>
  <attribute>
   <name>target</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
       别名
         </description>
  </attribute>
 </tag>
 <tag>
  <name>pageLink</name>
  <tag-class>org.whvcse.page.TagLink</tag-class>
  <body-content>empty</body-content>
  <description/>
  <attribute>
   <name>format</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
          链接信息
         </description>
  </attribute>
  <attribute>
   <name>cls</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
           扩展信息,实现LinkHandler接口
         </description>
  </attribute>
  <attribute>
   <name>var</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <description>
           该属性将不输出分页信息,将信息赋给var变量
         </description>
  </attribute>
 </tag>
</taglib>

 

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="whvcse" uri="http://mengdejun.iteye.com"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <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>
  <%
  	List a=new ArrayList();
  for(int i=1;i<=50;i++)
  {
		a.add(i);
 		request.setAttribute("list",a);
  }
   %>
  <body>
   <whvcse:page id="list" target="olist" scope='request' rows='10'><!-- 分类标签 -->
   <%
   			List o=(List)request.getAttribute("olist");
   			for(int i=0;i<o.size();i++)
   			{
   				out.print(o.get(i)+"<br/>");
   			}
   		 %>
   		<whvcse:pageLink/>
   </whvcse:page>
  </body>
</html>
分享到:
评论

相关推荐

    实用java分页标签

    Java分页标签是Java Web开发中的一个重要概念,它主要用于处理大量数据的展示,尤其是在数据库查询结果需要在网页上以多页形式呈现时。这个技术可以让用户更方便地浏览和导航大量的信息,而不会一次性加载所有数据...

    jsp java自定义标签 分页 当前位置 循环遍历数据

    例如,对于分页标签,我们可能有`pageSize`和`currentPage`等属性,而在`jspTld`文件中,我们将为这些属性指定对应的Java类型和默认值。 总的来说,通过结合JSP和Java自定义标签,我们可以构建高度定制的、可复用的...

    jsp自定义分页标签

    本主题将深入探讨“jsp自定义分页标签”,这是一种在网页展示大量数据时非常实用的功能,它可以有效地帮助用户浏览和操作数据。 一、JSP自定义标签基础 JSP自定义标签是JSP技术的一部分,它允许开发者创建自己的...

    java分页标签

    总之,"java分页标签"是一个自定义的JSP标签库,旨在简化Java Web应用中的分页实现,提高开发效率,并提供良好的用户体验。通过理解上述核心概念,开发者可以更好地利用这样的分页工具,优化他们的Web应用。

    JAVA分页标签-简单的分页标签

    本文将深入探讨“JAVA分页标签”,这是一种简化分页实现的机制。 一、什么是分页标签? 分页标签是Java服务器页面(JSP)中的一个组件,它允许开发者在JSP页面上方便地实现分页功能,而无需编写大量的HTML和...

    非常好用的jsp分页标签

    本资源提供了一个非常好用的JSP分页标签,它简化了在JSP页面上实现分页的过程,无需编写过多的Java代码,只需在JSP页面上插入特定的标签即可。 1. **JSP分页标签**:JSP分页标签是一种预定义的、可重用的组件,可以...

    java分页标签详细Demo

    Java分页标签是一种在Java Web开发中用于实现页面数据分页显示的技术,它极大地简化了开发者的工作,使得在网页上展示大量数据时可以方便地进行翻页操作。在这个"Java分页标签详细Demo"中,我们将深入探讨如何利用...

    JSP通用分页显示1.2.rar_java 分页显示_jsp_jsp 分页_jsp 分页_jsp分页

    3. **使用JSP分页标签库** JSP标准标签库(JSTL)提供了`&lt;c:forEach&gt;`等标签,可以用来遍历分页数据。同时,还有一些第三方的分页标签库,如DisplayTag,提供了更丰富的分页功能,如排序、导出等。 4. **实例解析...

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

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

    自制java分页标签

    Java分页标签是一种在Web应用开发中常用的组件,主要用于处理大量数据的展示,避免一次性加载所有数据导致页面响应慢或内存消耗过大。本自制的Java分页标签通过两个关键参数——总页数和当前页数,实现了动态控制...

    java分页标签与大家分享

    总结来说,Java分页标签提供了一种在JSP页面上方便地实现数据分页的方法。通过自定义标签,我们可以将分页逻辑封装起来,使得视图层代码更简洁,同时保持良好的可维护性。学习和掌握这一技术,对于提升Java Web应用...

    最好最好的java万能分页标签

    "最好最好的java万能分页标签"可能是一个开源的Java分页组件,它的特点是简单易用。只需要导入对应的Jar包,然后在代码的五个关键位置进行配置,即可快速实现分页功能。这五个位置可能包括: 1. **配置文件**:在...

    java自定义分页标签

    在Java开发中,自定义分页标签是一种常见的需求,它能帮助我们构建用户友好的界面,使得大量数据的展示变得更加高效和便捷。本教程将详细讲解如何创建和使用自定义分页标签,以及如何实现淘宝购物分页标签的样式。 ...

    jsp分页标签,servlet技术实现

    本主题主要围绕"jsp分页标签"和"Servlet技术实现"进行深入讲解。 首先,我们来看"jsp分页标签"。分页标签库如`DisplayTag`或`PagedListHolder`提供了一种声明式的方式来实现分页功能。这些标签库通过在JSP页面中...

    java自定义分页标签实现带条件的分页查询

    总结来说,自定义Java分页标签是一种高效的方法,可以让你在JSP中轻松实现带条件的分页查询。通过这种方式,你可以灵活地控制查询逻辑,同时保持视图层的清晰和简洁,提升代码的可维护性和复用性。

Global site tag (gtag.js) - Google Analytics