1、分页类:
public class Page {
/**
* 一行显示的最大记录数
*/
public static int MAX_ROW = 15;
/**
* 当前开始位置
*/
private int index;
/**
* 总页数
*/
private int page_num;
/**
* 查询的结果集大小
*/
private int total;
/**
* 返回链接
*/
private String url;
public Page() {
index = 0;
page_num = 1;
total = 0;
}
public int getTotal() {
return total;
}
public int getIndex() {
return index;
}
public int getPageNum() {
return page_num;
}
public void setTotal(int num) {
total = num;
if (total % MAX_ROW == 0) {
page_num = total / MAX_ROW;
}
else {
page_num = total / MAX_ROW + 1;
}
}
/**
* 在文本中插入页面标号为num的标记
*/
private void insertTag(StringBuffer text, int num) {
int temp = index / MAX_ROW;
if (num == temp) {
text.append(num + 1).append(" ");
}
else {
text.append("<a href=" + url + "&start_index=");
text.append(num * MAX_ROW).append(">").append(num + 1).append("</a> ");
}
}
/**
* 在文本中插入位置为起始位置为num,页面标号为str的标记
* @param text
* @param num 起始位置
* @param str 页面编号
*/
private void insertTag(StringBuffer text, int num, String str) {
text.append("<a href=" + url + "&start_index=");
text.append(num).append(">").append(str).append("</a> ");
}
public String getFooter() {
if (total <= MAX_ROW) {
return "";
}
StringBuffer str = new StringBuffer("分页:");
if (page_num <= MAX_ROW) {
for (int i = 0; i < page_num; i++) {
insertTag(str, i);
}
if (index + MAX_ROW < total) {
insertTag(str, index + MAX_ROW, "下一页");
}
else {
str.append("下一页");
}
return str.toString();
}
else {
int unit = MAX_ROW * MAX_ROW;
if (index < unit) {
int i;
for (i = 0; i < MAX_ROW; i++) {
insertTag(str, i);
}
String tt = "下" + MAX_ROW + "页";
insertTag(str, i * MAX_ROW, tt);
return str.toString();
}
else { //处理在中间或最后10页的问题
//page表示页;section表示多个页组成的面
//当前页面所在的页号。
int currentPage = index / MAX_ROW;
//当前页所在的面
int currentSection = currentPage / MAX_ROW + 1;
//上一面的开始页
int lastPage = (currentSection - 1) * MAX_ROW - 1;
//上一面的开始页的开始项的编号
int lastPageRow = lastPage * MAX_ROW;
//下一面的开始页编号
int nextPage = currentSection * MAX_ROW;
//下一面的开始页的开始项的编号
int nextPageRow = nextPage * MAX_ROW;
String tt = "上" + MAX_ROW + "页";
insertTag(str, lastPageRow, tt);
//如果还有下一面
if (nextPageRow <= total - 1) {
for (int i = 0; i < MAX_ROW; i++) {
insertTag(str, i + lastPage + 1);
}
tt = "下" + MAX_ROW + "页";
insertTag(str, nextPageRow, tt);
}
else { //如果没有下一面
//当前面的页面总数
int lengthOfPage = total - (lastPage + 1) * MAX_ROW;
lengthOfPage = lengthOfPage / MAX_ROW + 1;
for (int i = 0; i < lengthOfPage; i++) {
insertTag(str, i + 1 + lastPage);
}
}
return str.toString();
}
}
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public void setIndex(int index) {
this.index = index;
}
}
//未完待续..........................................
分享到:
相关推荐
java精华工具类集锦: anno 通用注解支持类 audio 音频播放器,例如播放mp3 bytes 字节工具类:字节数组转二进制、字节数组转十六进制、十六进制转字节数组、字节转换字符串 cache 缓存工具:内存型缓存、文件型缓存...
### Java面试题集锦知识点详解 #### 一、选择题知识点 **1. 构造函数的特性** - **选项A**: 正确。构造函数的名称必须与类名相同,这是构造函数的一个基本特点。 - **选项B**: 正确。Java允许在一个类中定义多个...
### Java基础知识 #### 1. Java的基本数据类型与String类型的区别 - **基本数据类型**:包括`byte`, `short`, `int`, `long`, `float`, `double`, `char`, `boolean`。它们直接存储具体的值,占用固定的内存空间。...
Java 面试题集锦 本文档汇集了 Java 相关的面试题,涵盖了 Java 基础知识、多线程编程、数据库操作、XML 解析、EJB 等方面。 1. Singleton 模式 Singleton 模式主要是为了保证在 Java 应用程序中,一个类 Class ...
操作系统课程设计集锦涵盖了多种编程语言,如VB(Visual Basic)、VC(Visual C++)和Java,用于模拟操作系统的实现。这些代码实例是学习和理解操作系统核心概念的宝贵资源,对于计算机科学专业的学生以及对操作系统...
- **并发工具类**:如Semaphore、CountDownLatch、CyclicBarrier等,用于协调线程间的执行顺序。 #### 6. 多线程中死锁的概念 死锁是指两个或多个线程在执行过程中因争夺资源而造成的一种僵局现象,若无外力作用,...
### JSP案例开发集锦知识点解析 #### 一、JSP技术概述 JSP(JavaServer Pages)是一种基于Java的服务器端脚本技术,用于创建动态网页或Web应用程序。它结合了HTML标记、脚本语言(如JavaScript)以及Java代码片段...
- **分页代码**: 可以使用LotusScript或Java编写自定义代理来实现分页功能,或者使用内置的分页功能。 #### 21. 同一用户重复登录 - **解决方法**: 使用会话管理和身份验证机制来防止重复登录,例如通过设置会话...