`
jdluojing
  • 浏览: 17957 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

JSP标签分页实现

 
阅读更多

网也中经常会用到分页,分页的实现有很多中。从数据库中回去分页数据的方法一般都差不多,主要就是怎么在网页上呈现出来的差别。一般我们会定义一个实体类,他将存放所有与分页相关的数据和设置。在使用struts2的时候可以在后台直接将将数据填充到分页实体类对象中,然后可以在结果页面通过标签活着EL表达式来获取相应的信息来完成分页显示。还有一种就是我们可以通过JSP标签来完成分页的显示。

首先我们定义一个实体类,他包含一些设置信息和承载我们要显示的分页数据。

public class PageBean {
	
	private int pageSize;//每页大小
	private int totalrows;//总记录数
	private int pageNum;//总页数
	private int curPage;//当前页码
	
	private List items;//存放数据
	
	//默认构造器,初始化成员变量
	public PageBean(int totalRows, int curPage,List items){
		this.pageSize = 10;
		this.totalrows = totalRows;
		this.curPage = curPage;
		this.pageNum = (int) Math.ceil((double)totalRows / pageSize);
		this.items = items;
	}

	//省略get/set方法
}

然后我们就开始编写我们的分页标签。我们定义一个类,让他继承TagSupport类,然后重写其中的部分方法就可以了:

public class PagerTag extends TagSupport {

	private String value = "pb";// 存放数据实体的名字

	public void setValue(String value) {
		this.value = value;
	}

	@Override
	public int doStartTag() throws JspException {
		JspWriter out = pageContext.getOut();
		String outStr = makeString();
		try {
			out.write(outStr);
		} catch (IOException e) {
			e.printStackTrace();
		}

		return SKIP_BODY;
	}
	
	private String makeString() {

		// 获取到存放在request中的数据实体
		Object p = pageContext.getRequest().getAttribute(
				value);
		PageBean pageBean = (PageBean) pageContext.getRequest().getAttribute(value);
		
		StringBuffer sb = new StringBuffer();
		
		if (pageBean != null && pageBean.getItems() != null
				&& pageBean.getItems().size() > 0) {

			sb.append("共" + pageBean.getCurPage() + " / "
					+ pageBean.getPageNum() + "页");
			//首页 上一页
			if (pageBean.getCurPage() > 1) {
				sb.append("<a href='?page=1'>首页</a>");
				sb.append("<a href='?page=" + (pageBean.getCurPage()-1) + "'>上一页</a>");
			}
			
			//循环显示中间页码,这里也可控制最大只显示多少页码
			for (int i = 1; i < pageBean.getPageNum() + 1; i++) {

				if (i == pageBean.getCurPage()) {
					sb.append(" " + i + " ");
				} else {
					sb.append("<a href='?page=" + i + "'> " + i + " </a>");
				}
			}
			
			//下一页 末页
			if(pageBean.getCurPage() != pageBean.getPageNum()){
				sb.append("<a href='?page=" + (pageBean.getCurPage() + 1) + "'>下一页</a>");
				sb.append("<a href='?page=" + pageBean.getPageNum() + "'>末页</a>");
			}

		}
		
		return sb.toString();
	}

}

我们这里通过在value属性来从Requst中获取之前我们从后台填充了数据的PageBean对象。

标签类写完了,我们还要编写对应的tlg文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
	<tlibversion>1.2</tlibversion>
	<jspversion>1.1</jspversion>
	<shortname>page</shortname>
	<uri>/luo_pager</uri>
	<tag>
		<name>pager</name>
		<tagclass>com.luojing.pager.PagerTag</tagclass>
		<bodycontent>empty</bodycontent>
		<attribute>
			<name>value</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
	</tag>
</taglib>

然后在web.xml中进行注册:

<jsp-config>
		<taglib>
			<taglib-uri>/luo_pager</taglib-uri>
			<taglib-location>/WEB-INF/page_taglib.tld</taglib-location>
		</taglib>
	</jsp-config>

我们再编写一个测试用的Servlet:

public class PagerServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		int curPage = Integer.parseInt(req.getParameter("page") == null ? "1"
				: req.getParameter("page"));
		List list = new ArrayList();
		
		int start = (curPage -1)* 10 + 1;
		int end = start + 10 > 26 ? 26 : start + 10;
		for(int i = start; i < end; i++){
			list.add(i);
		}

		PageBean pageBean = new PageBean(25, curPage, list);
		req.setAttribute("pb", pageBean);
		
		
		RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
		rd.forward(req,resp);
	}
}

这样我们就可以在我们的JSP页面中使用我们自己的标签来完成分页条的显示了。

<%@ page language="java" import="java.util.*,com.luojing.pager.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="luo" uri="/luo_pager" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>pager test</title>
  </head>
  
  <body>
  	<%
  		PageBean p = (PageBean) request.getAttribute("pb");
  		List<Integer> list = p.getItems();
  		for(Integer i : list){
  			pageContext.getOut().write("值为: " + i + "<br/>");
  		}
  	
  	%>
    <luo:pager value="pb"/>
  </body>
</html>

这里为了方便,我直接在JSP页面中循环输出PageBean对象中携带的数据。

效果如下:


时间匆忙,页面效果做的比较丑陋,不过所需要的功能基本都能够实现。如果页面还需要传递其他参数,那么最好将page参数(指定要显示的页码)放在查询字符串的最后,这样可以在分页的时候保留其他的参数。以前我做分页没用过使用JSP标签,对JSP标签也不是很熟悉,今天就当学习一下JSP自定标签吧。

分享到:
评论

相关推荐

    JSP 利用标签实现分页技术

    本主题将深入探讨如何使用JSP自定义标签来实现分页功能,这将使代码更加整洁,提高可维护性,并为用户提供更好的用户体验。 首先,让我们了解什么是JSP自定义标签。JSP自定义标签是JSP的一种扩展,它允许我们创建...

    jsp自定义分页标签

    在JSP页面中,你可以像使用标准JSP标签一样使用自定义分页标签。例如: ```jsp ${totalRecords}" itemsPerPage="10" /&gt; ``` 三、分页逻辑实现 1. 计算总页数 根据总条目数和每页显示的条目数,可以计算出总...

    JSP自定义标签分页

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

    JSP自定义分页标签

    JSP自定义分页标签,mysql数据库,通过导入jar包,使用标签的方式实现分页的功能。

    jsp分页标签,servlet技术实现

    在Web开发中,数据量较大的页面往往需要分页显示,以提高用户体验并减轻服务器压力。JSP(JavaServer Pages)是Java平台上的...在实际项目中,开发者应根据项目规模、性能要求以及团队的技术栈选择合适的分页实现方式。

    jsp实现分页功能

    在网页开发中,分页功能是一项非常常见的需求,特别是在数据量较大的情况下,为了提高用户体验,我们需要将大量数据分批次展示,这就是jsp实现分页功能的主要目的。本篇将详细介绍如何利用jsp来完成这一任务。 首先...

    jsp 分页实现总结大全

    本文将深入探讨JSP(JavaServer Pages)中的分页实现策略,以帮助开发者更好地理解和应用这一技术。 一、基础概念 1. JSP:JavaServer Pages,是Java的一种动态网页技术,允许在服务器端生成HTML、XML或其他格式的...

    非常好用的jsp分页标签

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

    使用jsp实现分页显示

    本篇将详细介绍如何使用JSP来实现分页显示。 首先,我们需要理解分页的基本原理。分页通常涉及到两个关键参数:当前页码和每页显示的条目数。通过这两个参数,我们可以计算出当前页的数据范围,然后从数据库中查询...

    jsp里的分页实现

    在这个分页实现中,Action类会执行以下操作: 1. **查询数据**:Action类会调用MyBatis的Mapper接口,传递当前页码和每页记录数作为参数,查询对应页的数据。在MyBatis中,可以通过动态SQL实现分页查询,例如使用`...

    jsp实现分页案例

    在这个"jsp实现分页案例"中,我们将探讨如何利用Java、MySQL数据库和JDBC(Java Database Connectivity)来实现前端界面的简单分页。 首先,我们要理解JSP(JavaServer Pages)的角色。JSP是一种动态网页技术,允许...

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

    本文将深入探讨如何使用Java自定义标签来实现分页功能,当前位置的显示以及数据的循环遍历。 首先,让我们了解一下Java自定义标签的基本概念。自定义标签是JSP的一种扩展机制,它允许开发者创建自己的标签库,这些...

    jsp+jstl实现分页

    jsp+jstl实现分页,简单的分页

    jsp数据分页源代码

    它可能包含一个自定义的JSP标签库(Tag Library),开发者可以通过在页面中引入这个库,然后调用特定的分页标签来实现分页功能。 6. **分页工具的使用**: 分页工具可能包含以下关键组件: - 分页参数:如当前...

    简洁的JSP的分页技术实现代码

    "简洁的JSP分页技术实现代码"这个主题涵盖了如何在JSP(JavaServer Pages)中实现高效、易用的分页功能。下面我们将深入探讨这一话题。 1. **分页基础概念**: - 分页是一种将大量数据分成若干小块,每次只显示一...

    使用JSP自定义标签实现EMP分页

    在这个场景中,"使用JSP自定义标签实现EMP分页"是一个具体的应用实例,旨在提升代码的可读性和可维护性,对比传统的Servlet方法,自定义标签能让分页处理更加简洁。 首先,我们要了解JSP自定义标签的基本结构和工作...

    jsp servlet 简单分页实现

    本教程将围绕“jsp servlet 简单分页实现”这一主题展开,介绍如何在Java Web项目中实现分页功能。 首先,我们需要了解分页的基本概念。分页通常涉及两个主要参数:当前页数和每页显示的记录数。用户可以通过点击...

    带有多种样式的JSP分页标签

    带有多种样式的JSP分页标签,内附多种样式,方便使用,只需一句标签即可实现多样式分页

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

    2. **JSP分页实现方式** JSP分页通常涉及以下几个步骤: - 数据查询:从数据库中获取总记录数和当前页的数据。 - 计算总页数:根据每页显示的记录数和总记录数计算出总页数。 - 分页导航的构建:创建页码列表,...

Global site tag (gtag.js) - Google Analytics