关于分页,网上看了很多文章,相信所有人都会觉得J2EE中实现分页相对于ASP.NET中处理分页实在是一件很痛苦的事..
下面就结合我做的例子说明一下通用的分页标签实现.
先说明一下分页所需要用到的文件 Pager.java (不用说,肯定是保存分页信息的了),PagerHelper.java(处理页面信息) ,PageTag.java(自定义分页标签),还有一个是pagetag.tld文件,分页标签描述文件.
先帖出这四个文件的源码
1、Pager.java
package org.awc.commns;
/**
* 保存分页信息的类
*
* @author Administrator
*
*/
public class Pager {
private int totalRows; // 总行数
private int pageSize; // 每页显示的行数
private int currentPage; // 当前页号
private int totalPages; // 总页数
private int startRow; // 当前页在数据库中的起始行
private String linkUrl; // 要跳转的URL
public Pager() {
}
public Pager(int _totalRows,int _pageSize) {
totalRows = _totalRows;
pageSize = _pageSize;
totalPages = totalRows / pageSize;
int mod = totalRows % pageSize;
if (mod > 0) {
totalPages++;
}
currentPage = 1;
startRow = 0;
}
//此处略去属性的getter和setter方法
/**
* 设定hibernate查询的起始行数
*
* @param currentPage
*/
public void setStart(int currentPage) {
this.currentPage = currentPage;
startRow = (currentPage - 1) * pageSize;
}
}
2、PagerHelper.java
import javax.servlet.http.*;
/**
* 控制分页的类
*
* @author Administrator
*
*/
public class PagerHelper {
public static Pager getPager(HttpServletRequest httpServletRequest,
int totalRows,int pageSize) {
// 定义pager对象,用于传到页面
Pager pager = new Pager(totalRows,pageSize);
// 从Request对象中获取当前页号
String currentPage = httpServletRequest.getParameter("cpage");
// 如果当前页号为空,表示为首次查询该页
// 如果不为空,则刷新pager对象,输入当前页号等信息
if (currentPage != null) {
pager.setStart(Integer.parseInt(currentPage));
}
else {
pager.setStart(1);
}
return pager;
}
}
3、PageTag.java
import java.io.IOException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class PageTag extends TagSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private Pager pager;
public int doStartTag() {
try {
JspWriter out = pageContext.getOut();
out.print("第 " + pager.getCurrentPage() + " 页/共 "
+ (pager.getTotalPages()) + " 页");
if (pager.getCurrentPage() == 1) {
out.print("[最首页]");
out.print("[上一页]");
}
if (pager.getCurrentPage() != 1) {
out.print("[<a href='" + pager.getLinkUrl()
+ "&cpage=1'>最首页</a>]");
out.print("[<a href='" + pager.getLinkUrl() + "&cpage="
+ (pager.getCurrentPage() - 1) + "'>上一页</a>]");
}
for (int i = pager.getCurrentPage() - 3; i <= pager
.getCurrentPage() + 3; i++) {
if (i <= 0 || i > pager.getTotalPages()) {
continue;
}
if (i == pager.getCurrentPage()) {
out
.print("[<span style='color:#FF0000; border: 1px solid #cccccc; font-weight:bold; width:15px;text-align: center;'> "
+ i + " </span>]");
} else {
out.print("[<a href='" + pager.getLinkUrl() + "&cpage=" + i
+ "'> " + i + " </a>]");
}
}
if (pager.getCurrentPage() == pager.getTotalPages()
|| pager.getTotalPages() == 0) {
out.print("[下一页]");
out.print("[最末页]");
}
if (pager.getCurrentPage() != pager.getTotalPages()
&& pager.getTotalPages() != 0) {
out.print("[<a href='" + pager.getLinkUrl() + "&cpage="
+ (pager.getCurrentPage() + 1) + "'>下一页</a>]");
out.print("[<a href='" + pager.getLinkUrl() + "&cpage="
+ (pager.getTotalPages()) + "'>最末页</a>]");
}
out.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
return super.SKIP_BODY;
}
public int doEndTag() {
return super.EVAL_PAGE;
}
public void setPager(Pager pager) {
this.pager = pager;
}
public Pager getPager() {
return pager;
}
}
4、pagetag.tld
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>My Tags</short-name>
<tag>
<name>page</name>
<tag-class>org.awc.commns.PageTag</tag-class><!-- PageTag.java具体项目路径-->
<body-content>empty</body-content>
<attribute>
<name>pager</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>org.awc.commns.Pager</type><!-- Pager.java具体项目路径-->
</attribute>
</tag>
</taglib>
以上四个文件为固定,其余部分代码示例如下:
Action或者Servlet部分:
public ActionForward display(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
//不相关代码略去
int totalRows;// 记录总行数
Pager pager = null; // 页面信息
int pageSize = 15;
try {
totalRows = tservice.getTotalRowsBySubType(tsid); // 获取指定主题总行数
pager = PagerHelper.getPager(request, totalRows, pageSize); // 初始化分页对象
pager.setLinkUrl("index.asp?method=display&stid=" + tsid); // 设置跳转路径
request.setAttribute("pb", pager); // 将分页信息保存在Request对象
topicList = tservice.findTopicByStid(tsid, pager); // 根据分页信息查询指定的主题
request.setAttribute("results", topicList);
return mapping.findForward("index");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mapping.findForward("fail");
}
JSP 页面部分:
1、在页面开始部分导入标签库文件 :<%@ taglib prefix="page" uri="WEB-INF/pageTld/pagetag.tld"%> --具体路径视具体项目而定
2、在需要加入分页信息的部分加上<page:page pager="${pb}" /> 即可。
OK,分页搞定,效果如下:第 5 页/共 12 页[最首页][上一页][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ][ 8 ][下一页][最末页]
相关推荐
`pager-taglib`是Java Web开发中常用的分页标签库,它简化了在JSP页面上实现分页功能的过程。这个标签库通常与Spring MVC、Struts2等框架结合使用,提供了一种声明式的方式来展示数据分页。下面将详细解释`pager-...
本项目标题为“分页标签使用java编写”,这意味着我们探讨的是一个用Java实现的分页控件,可能是基于Servlet、JSP或者Spring MVC等Web开发框架。开发者自己创建了这个控件,并希望通过社区的反馈来改进其功能和性能...
在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...
自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签自定义分页标签...
7. **在JSP页面使用自定义标签**:在视图层,使用自定义的分页标签来构建分页链接。例如,`<startPage/>`,`<endPage/>`,`<previousPage/>`和`<nextPage/>`标签可以嵌入到HTML代码中,形成完整的分页导航。 8. **...
自定义页面分页标签是指开发者根据项目需求,创建个性化的分页组件,以实现更加灵活、符合界面设计风格的分页功能。下面将详细探讨如何实现自定义页面分页标签及其相关的知识点。 1. **基础概念**: - 分页:将...
Java分页标签是Java Web开发中的一个重要概念,它主要用于处理大量数据的展示,尤其是在数据库查询结果需要在网页上以多页形式呈现时。...理解并熟练掌握分页标签的使用,对于提高项目质量和开发效率有着重要的意义。
然后,根据分页标签库的文档指示,使用选择的前缀和具体的标签来构建分页界面。 3. **JSP+Servlet配合**:在JSP分页中,Servlet通常负责从数据库获取数据并计算总页数,然后将这些信息传递给JSP页面。Servlet通过...
在JSP页面中,你可以像使用标准JSP标签一样使用自定义分页标签。例如: ```jsp ${totalRecords}" itemsPerPage="10" /> ``` 三、分页逻辑实现 1. 计算总页数 根据总条目数和每页显示的条目数,可以计算出总...
在使用这个分页标签组件时,开发者需要在JSP页面中引入`papertag.tld`,然后就可以像使用内置JSP标签一样使用`<paper:tag>`标签。通过设置属性,如`pageSize`、`totalRecord`、`currentPage`,可以控制分页的行为。...
使用"好用的分页标签",开发者可以轻松地在JSP页面中插入分页组件,只需在页面中添加对应的标签,然后设置一些必要的属性,如当前页码、总页数、每页显示条目数等。这大大减少了编写和维护分页逻辑的代码量,提高了...
在Java开发中,分页是Web应用程序中常见的一种功能,用于处理...了解并熟练使用分页标签,有助于提升开发效率,优化用户体验。在实际项目中,你可以根据需求选择适合的分页标签库,或者创建自定义标签来满足特定需求。
`pager-taglib`是一个开源的JSP标签库,提供了一系列易于使用的分页标签,如`<pager:page>`、`<pager:previous>`、`<pager:next>`等,开发者只需在JSP页面中引入这些标签,就可以快速构建出具有分页功能的列表页面。...
JSP自定义分页标签,mysql数据库,通过导入jar包,使用标签的方式实现分页的功能。
本篇文章将详细讲解如何在Java Web应用中使用分页标签。我们将主要围绕以下两个核心概念进行讨论:源码理解和工具的使用。 首先,我们需要理解分页的基本原理。在Web应用中,当数据量过大时,一次性加载所有数据...
**标签使用示例** 在JSP页面中,我们可以这样使用这个分页标签: ```jsp ${currentPage}" totalPages="${totalPages}" pageSize="${pageSize}"/> ``` 这里的`${currentPage}`、`${totalPages}`和`${pageSize}`需要...
3. 在JSP页面中使用自定义标签:在JSP文件中,通过`<%@ taglib %>`引入刚刚创建的TLD文件,然后就可以使用自定义的分页标签了: ```jsp ${totalRecords}" pageSize="${pageSize}"> <!-- 分页展示逻辑 --> ``` ...
使用这个分页标签时,我们需要在JSP页面中引入TLD,然后在需要分页的地方使用自定义的分页标签,指定必要的参数如当前页码、每页数量等。标签内部会处理数据库查询、计算分页信息,并将结果显示出来。用户可以通过...