自己写了一个分页
凑合着用
根据前2后3的设定:
当选择了第5页,生成5的前2页和5的后3页,则indexList为: 345678
当选择了第6页,则indexList为: 456789
package com.mtea.shop.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.mtea.shop.util.MathUtil;
/**
* 分页
* @author macrotea
* 2011-3-27
*/
public class Pager implements Serializable{
private static final long serialVersionUID = 1L;
//默认页大小
private static final int DEFALT_PAGE_SIZE=5;
//页码索引限制为5个
private static final int DEFALT_DIPSLAY_LIMIT=5;
//前导限制2
private static final int DEFALT_PREV_LIMIT=2;
//后续限制3
private static final int DEFALT_NEXT_LIMIT=3;
//当前页码
private int pageNumber;
//每页大小
private int pageSize;
//总页数
private int pageTotal;
//总记录数
private int rowTotal;
//数据链表
private List dataList;
//上一页
private int prevPage;
//下一页
private int nextPage;
//第一页
private int firstPage;
//最后一页
private int lastPage;
//页码索引链表
private List<Integer> indexList;
public static void main(String[] args) {
Pager pager=new Pager(12,DEFALT_PAGE_SIZE,56,null);
}
public Pager() {
super();
}
public Pager(int pageNumber, int pageSize, int rowTotal, List dataList) {
super();
this.pageNumber = pageNumber;
this.pageSize = pageSize;
this.rowTotal = rowTotal;
this.dataList = dataList;
extInit();
}
public void extInit(){
/*handle pageTotal*/
this.pageTotal=MathUtil.selfCountByRemainder(rowTotal, pageSize);
/*handle nextPage&prevPage*/
if (this.pageTotal > 0 && this.pageTotal > this.pageNumber) {
this.nextPage = this.pageNumber + 1;
}else{
//当pageNumber太大,则下一页也设置为pageTotal
this.nextPage=pageTotal;
}
if (this.pageNumber > 1&& this.pageTotal >= this.pageNumber) {
this.prevPage = this.pageNumber - 1;
}else{
//当pageNumber==1,则上一页也设置为1
this.prevPage=1;
}
/*handle firstPage&lastPage*/
firstPage=1;
lastPage=pageTotal;
/* handle indexList */
indexList = new ArrayList<Integer>();
if (this.pageTotal >= this.pageNumber && pageNumber >= DEFALT_DIPSLAY_LIMIT) {
// 处理中间情况:前2后3
for (int i = pageNumber - DEFALT_PREV_LIMIT; i < pageNumber; i++) {
System.out.println("处理中间情况:" + i);
indexList.add(i);
}
//处理尾部情况
if (pageTotal - pageNumber >= DEFALT_NEXT_LIMIT) {
for (int i = pageNumber; i <= pageNumber + DEFALT_NEXT_LIMIT; i++) {
System.out.println("处理尾部情况##:" + i);
indexList.add(i);
}
} else {
for (int i = pageNumber; i <= pageTotal; i++) {
System.out.println("处理尾部情况**:" + i);
indexList.add(i);
}
}
}else{
//处理前部情况和不合理的pageNumber
//handle: this.pageTotal < this.pageNumber
//6<88:12345
if(this.pageTotal >=DEFALT_DIPSLAY_LIMIT){
for (int i = 1; i <= DEFALT_DIPSLAY_LIMIT; i++) {
System.out.println("不合理的pageNumber:"+i);
indexList.add(i);
}
//handle: pageNumber < DEFALT_DIPSLAY_LIMIT
//3<5:123
}else{
for (int i = 1; i <= pageTotal; i++) {
System.out.println("处理前部情况:"+i);
indexList.add(i);
}
}
}
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageTotal() {
return pageTotal;
}
public void setPageTotal(int pageTotal) {
this.pageTotal = pageTotal;
}
public void setRowTotal(int rowTotal) {
this.rowTotal = rowTotal;
}
public int getRowTotal() {
return rowTotal;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getPageNumber() {
return pageNumber;
}
public void setDataList(List dataList) {
this.dataList = dataList;
}
public List getDataList() {
return dataList;
}
public int getPrevPage() {
return prevPage;
}
public void setPrevPage(int prevPage) {
this.prevPage = prevPage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getFirstPage() {
return firstPage;
}
public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
}
public int getLastPage() {
return lastPage;
}
public void setLastPage(int lastPage) {
this.lastPage = lastPage;
}
public List<Integer> getIndexList() {
return indexList;
}
public void setIndexList(List<Integer> indexList) {
this.indexList = indexList;
}
@Override
public String toString() {
return "当前页=" + pageNumber + "\n每页行数=" + pageSize + "\n页总数=" + pageTotal + "\n行总数=" + rowTotal + "\n上一页=" + prevPage + "\n下一页=" + nextPage
+ "\nindexList:" +indexList;
}
}
jsp页面:
<div id="pager">
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.firstPage"/>">第一页</a>
|
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.prevPage"/>">上一页</a>
(
<span id="pageNumbers">
<s:iterator value="pager.indexList" var="eachIndex">
<%--pageNumber是Action中的int值--%>
<s:if test='%{#eachIndex==pageNumber}'>
<s:property />
</s:if>
<s:else>
<a href="/page/admin/bookCategory_list?pageNumber=<s:property />"><s:property /></a>
</s:else>
</s:iterator>
</span>
)
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.nextPage"/>">下一页</a>
|
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.lastPage"/>">最后一页</a>
(第<s:property value="pageNumber"/>页/共<s:property value="pager.pageTotal"/>页 <s:property value="pager.rowTotal"/>条记录 )
</div>
分享到:
相关推荐
本教程主要探讨如何在Struts2框架下实现一个基于JSP的自定义分页组件,名为"zoo-paging-1.0.jar"。该组件不仅提供了分页功能,还附带了源代码和示例项目,方便开发者理解和应用。 首先,我们来理解分页的基本概念。...
本项目“基于struts2+hibernate3+spring的分页组件”着重于如何在这样的集成环境中实现数据的分页显示。分页是大型数据集展示中常见的需求,它可以提高用户体验,避免一次性加载大量数据导致的性能问题。 在Struts2...
Struts2是一个基于MVC(Model-View-Controller)架构的Java Web框架,它提供了强大的动作调度、结果映射、拦截器等功能,简化了Java Web应用的开发。在Struts2中,自定义标签可以用来扩展JSP页面的功能,使其能够更...
在Java Web开发中,FreeMarker和Struts2是两个非常重要的技术组件。FreeMarker是一个模板引擎,用于生成动态HTML、XML等文档,而Struts2则是一个基于MVC设计模式的Web应用框架。本篇文章将深入探讨如何在Struts2框架...
综上所述,Struts2.0 实现数据分页涉及到Action、DAO、数据模型和视图等组件的协同工作。通过理解并掌握这一过程,开发者可以有效地管理和展示大量数据,提升Web应用的性能和用户体验。在实际项目中,应根据具体需求...
3. **分页处理**:通过Struts2的标签或自定义组件实现分页逻辑。 4. **显示数据**:在前端页面上展示数据,并提供导航控件让用户可以翻页。 ### 技术栈 - JDK版本:1.6 - 开发工具:MyEclipse 6.0 - 应用服务器:...
3. **Struts2 Action**:在Struts2中,Action是处理用户请求的核心组件。我们需要创建一个Action类,其中包含执行分页查询的方法。这个方法会根据用户的请求参数(如当前页码)来构造并执行SQL,然后将查询结果封装...
2. **分页组件**: 在这个项目中,可能会使用到第三方的分页库,如DisplayTag或PageHelper等,它们提供了方便的分页API和标签库。DisplayTag是一个强大的表格显示标签库,支持分页、排序等功能。PageHelper是...
在Struts框架中,Controller组件负责接收用户请求,调度模型(Model)进行业务处理,并将结果传递给视图(View)进行展示。这极大地提高了代码的可维护性和可扩展性。 在这个“jsp +struts 分页经典”项目中,分页...
通过以上步骤,我们可以实现一个基于Struts2和iBatis的分页功能。在这个过程中,源码和工具的合理使用至关重要,如Struts2的拦截器、iBatis的SqlSession和Freemarker的模板语法,都是实现这一功能的重要组成部分。...
**基于Struts2的BBS项目** Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发。在这个基于Struts2的BBS项目中,开发者利用了Struts2的核心优势,构建了一个功能完善的论坛系统。下面...
Struts分页组件是基于Apache Struts框架的一个实用工具,用于在Web应用程序中实现高效、灵活的页面数据展示。在大型系统中,特别是在处理大量数据时,分页功能显得尤为重要,因为它可以提高用户体验,避免一次性加载...
在这个基于Struts的分页实现中,我们可以探讨以下几个核心知识点: 1. **分页原理**:分页是大型数据集在Web应用中展示的重要方式,它可以避免一次性加载大量数据导致的性能问题。基本的分页原理包括设置每页显示...
对于分页,Struts框架并没有内置的分页组件,但可以通过集成第三方库如DisplayTag或使用自定义标签来实现。DisplayTag是一个强大的表格和分页标签库,它提供了一系列预定义的标签,可以轻松地在JSP页面上实现分页和...
3. **分页样式**:根据设计需求,可以定制分页组件的样式,如Bootstrap的分页导航。 4. **搜索引擎友好**:提供URL参数来支持搜索引擎的爬虫,例如通过`page`参数传递当前页码。 总之,Struts1.2实现分页需要结合...
通过以上步骤,我们就实现了EXTJS与Struts2的集成,以及基于它们的数据分页功能。这个简单的例子展示了EXTJS如何利用Struts2来获取和展示分页数据,帮助开发者快速理解并应用到实际项目中。对于初学者来说,这是一个...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了强大的控制层解决方案,帮助开发者构建可维护、可扩展的Web应用。而MySQL则是一种流行的关系型数据库管理系统,以其高效、稳定和...
通过上述步骤,我们已经成功实现了基于Struts2 和 EasyUI 的增删改查及分页排序功能。虽然过程中可能会遇到一些小问题,比如参数传递不正确、页面布局调整等,但只要保持耐心和细心,逐一排查问题所在,就能够顺利...
在"基于Struts的网上论坛BBS系统课程设计"中,我们将深入探讨如何利用Struts来构建一个功能完善的在线讨论平台。 1. **MVC模式**:Struts的核心是MVC模式,它将业务逻辑、数据和用户界面分离,使得开发和维护更加...
这个基于 Struts 2+Hibernate+Spring 的论坛系统源码提供了学习和理解这些技术如何协同工作的实例。 **Struts 2** 是一个用于构建企业级 Web 应用程序的 MVC(模型-视图-控制器)框架。它通过提供可扩展的拦截器和...