struts 下面的页面分页显示的实现

附加:PageHelper分页插件的:Page和PageInfo的区别; 说明: (1)为什么写本篇博客?: ● 在【Spring Boot电商项目29:商品分类模块八:后台的【分类列表(平铺)】接口;】中,实现分页功能时,使用到了PageHelper分页插件; ●但是,在【Spring Boot电商项目29:商品分类模块八:后台的【分类列表(平铺)】接口;】中,我们使用的是PageInfo对象; ●而,在【MyBatis进阶五:PageHelper分页插件;】中,我们第一次遇到PageHelper时候,使......... 阅读详情
   本应用的实现的过程是根据读取当前页面号码和发出请求页面的相对偏移值, 在数据库中读取指定数量的记录并以HashMap对象形式封装到一个List,其中每条记录中的各列以Object实例形式存于前面所讲的HashMap对象中.这样做的好处是便于代码的重用性, 我们可以用它做任何记录集片段的读取,而不必做任何代码的修改,你要做的就是根据你的具体需要单独写个类调用本分页类.
   由于这次实现设计的代码有些长,为了便于网友看的清晰.我将分文介绍每个类, 最后给出我做的一个留言本的分页实现过程.
   在这篇里我将先发出分页类(PageSplit.java),并做必要的解释, 在讲该类之前我先说说一个也很重要的类: PageInfo.java.该类没别的功能实现. 都是一些getter和setter方面, 以在页面根据属性值显示链接.  主要作为DTO对象在业务逻辑层和页面显示层传递参数. 该类的代码如下:

package net.eliry;

public class PageInfo
{
 private int totalPage=-1;               //要分页的总页数; 考虑到有可能为0,所以默认为-1,
 private int curPage=1;                 //当前显示的页面数, 初始值为1,即为首页;
 private boolean first;                 //是否是首页;
 private boolean pre;                   //是否有前一页;
 private boolean next;                 //是否有下一页;
 private boolean last;                 //是否是最后一页;
 private int pageSize=2;               //每页显示的记录数, 默认为2;
 private int totalItem=-1;             //要分页的总记录数; 考虑到有可能为0,所以默认为-1,
 private int curItem=2;                //当前页面显示的记录数;
 
 public int getTotalPage()
 {
  return totalPage;
 }
 public  void setTotalPage(int totalPage)
 {
  this.totalPage=totalPage;
 }
 
 public int getCurPage()
 {
  return curPage;
 }
 public  void setCurPage(int curPage)
 {
  this.curPage=curPage;
 }
 
 public int getPageSize()
 {
  return pageSize;
 }
 public  void setPageSize(int pageSize)
 {
  this.pageSize=pageSize;
 }
 
 public int getTotalItem()
 {
  return totalItem;
 }
 public  void setTotalItem(int totalItem)
 {
  this.totalItem=totalItem;
 }
 
 public int getCurItem()
 {
  return curItem;
 }
 public  void setCurItem(int curItem)
 {
  this.curItem=curItem;
 }
 
 public boolean getFirst()
 {
  return first;
 }
 public void setFirst(boolean first)
 {
  this.first=first;
 }
 
 public boolean getPre()
 {
  return pre;
 }
 public void setPre(boolean pre)
 {
  this.pre=pre;
 }
 
 public boolean getNext()
 {
  return next;
 }
 public void setNext(boolean next)
 {
  this.next=next;
 }
 
 public boolean getLast()
 {
  return last;
 }
 public void setLast(boolean last)
 {
  this.last=last;
 }
}

下一篇我将介绍分页的主角类PageSplit.java.     
:-)   !.............

这次我将介绍分页的主角类: PageSplit.java

     代码如下:(为便于理解方便,我不另外写注释,关键代码的说明我将在代码行的末尾做出详细说明)

package net.eliry;

//导入相关类;

import java.sql.ResultSet;
import java.sql.SQLException ;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;

import net.eliry.PageInfo;
import net.eliry.MysqlAccess;

public class PageSplit
{
 private PageInfo pageInfo;
 private int pri;
 private MysqlAccess ma;
 
 public PageSplit(PageInfo pageInfo,int pri)
 {
  ma=new MysqlAccess("bbs"); //访问"bbs"数据库,至于mysql数据库的访问类我就不列出来的.都是些查询和更新的方法
  this.pri=pri;                             //请求页与当前页的先后关系(第一or前一页or后一页or末页)
  this.pageInfo=pageInfo;        //页面相关参数说明类的实例子;若不明白可参看我的上一篇文章;
 }
 
 public List split(String sql)
 {
  List messages=new ArrayList();

/**

如果是第一次请求页面显示,则要要页面PageInfo类的对象的相关参数初始化,判断条件:总页数小于0
*/

  if(pageInfo.getTotalPage()<0  {
   int index=sql.indexOf("from");
   initPageInfo("select count(*) as total "+sql.substring(index));
  }
  configPageInfo();    //根据pri属性更新PageInfo的变动属性(主要是是否是首页.有否前页,有否后页,是否末页)

//以下是根据查询语句查结果并把每条记录属性和值放在一个HashMap对象中,然后把保存各个记录的HashMap对象保存在List中;

  try
  {
   ResultSet rs=ma.executeSQL(sql);
   if(rs==null)
   {
    messages= null;
   }
   else
   {

   //将游标划到分页位置,准备逐个读取记录;
    rs.absolute((pageInfo.getCurPage()- 1) *pageInfo.getPageSize()+1);
    
    java.sql.ResultSetMetaData rsmd=rs.getMetaData();
    int columnCount=rsmd.getColumnCount();
    String []colus=new String[columnCount];

    //得到各个列名,放入colus中;
    for(int i=0;i<columnCount;i++)
    {
     colus[i]=rsmd.getColumnName(i+1);
    }
    
    for(int i=0; i<pageInfo.getCurItem(); i++)
    {

     //循环处理,封装各个记录的信息
     HashMap hm=new HashMap();
     
     for(int j=1;j<=columnCount;j++)
     {
      hm.put(colus[j-1],rs.getObject(j));
     }
     //存入messages中,注意messages是个list对象;
     messages.add(hm);
     rs.next();
    }
   }
   ma.close();
  }
  catch(SQLException e) {e.printStackTrace(); }
 
  return messages;
 }
 
 private void configPageInfo()
 {

//根据pri设置返回页面的页号
  switch(pri)
  {
   case 0: pageInfo.setCurPage(1); break;
   case 1: pageInfo.setCurPage(pageInfo.getCurPage()-1);  break;
   case 2: pageInfo.setCurPage(pageInfo.getCurPage()+1); break;
   case 3: pageInfo.setCurPage(pageInfo.getTotalPage()); break;
   case -1 : break;
   default:break;
  }
  //以下设置pageinfo对象的可变属性
  if(pageInfo.getCurPage()==1)
  {
   pageInfo.setFirst(true);
   pageInfo.setPre(false);
  }
  else
  {
   pageInfo.setFirst(false);
  }
 
  if(pageInfo.getCurPage()>1)
  {
   pageInfo.setPre(true);
  }
  if(pageInfo.getCurPage()<pageInfo.getTotalPage())
  {
   pageInfo.setNext(true);
  }
 
  if(pageInfo.getCurPage()==pageInfo.getTotalPage())
  {
   pageInfo.setLast(true);
   pageInfo.setNext(false);
  }
  else
  {
   pageInfo.setLast(false);
  }
 
  if(pageInfo.getTotalPage()*pageInfo.getPageSize()==pageInfo.getTotalItem())
  {
   pageInfo.setCurItem(pageInfo.getPageSize());
  }
  else
   if(pageInfo.getCurPage()<pageInfo.getTotalPage())
   {
    pageInfo.setCurItem(pageInfo.getPageSize());
   }
   else
   {
    pageInfo.setCurItem(pageInfo.getTotalItem()-(pageInfo.getTotalPage()-1)*pageInfo.getPageSize());
   }
 }
 

    //初始化pageinfo对象的一些不变属性(总页数,总记录数...)
 private void initPageInfo(String sql)
 {
  try
  {
     ResultSet rs=ma.executeSQL(sql);
   
   if(rs.next())
   {
    pageInfo.setTotalItem(rs.getInt("total"));
   }
     
   ma.close();

   int pageTotal=(int)(Math.ceil((pageInfo.getTotalItem()*1.0)/pageInfo.getPageSize()));
   pageInfo.setTotalPage(pageTotal);
  }
  catch(SQLException e)  { e.printStackTrace();}
 }
 
 public PageInfo getPageInfo()
 {
  return pageInfo;
 }
 
 public void setPageInfo(PageInfo pageInfo)
 {
  this.pageInfo=pageInfo;
 }
}

 好了,这些将清楚了其实都很简单,希望各位都提宝贵意见,接触struts时间不长,才! .呵呵

作者Blog:http://blog.youkuaiyun.com/eliry/
PageInfo对象常用属性总结 mybatis中PageHelper中PageInfo类常用的属性 阅读详情

相关推荐

struts2+jdbc实现增删改查及带条件的分页查询

实现了struts2通过jdbc连接mysql数据库进行数据存储及从数据库中 查询出数据并显示到页面(jsp页面使用了struts2标签)上

PageHelper使用以及PageInfo中分页对象的转化

在使用Mybatis查询数据库展示到前端的过程中不可避免的要考虑到分页问题,这时就引入了Mybatis的PageHelper插件,这个插件对分页功能进行了强有力的封装,只需要将查询出来的数据List集合放入到它指定的对象中,就完成了分页,下面简单的对分页过程介绍一下。 分页代码 public PageInfo<Po> pageList(Integer pageNum, Intege...

Ep流苏的博客 1万+

FOC实战笔记:RC吸收电路的设计考量与参数调优

本文深入探讨了FOC驱动器中RC吸收电路的设计与调优。针对MOS管开关过程中的电压尖峰问题,详细阐述了RC电路的钳位与能量吸收原理,并提供了从参数计算、实验调试到布局布线的完整实战指南,旨在帮助工程师有效提升系统可靠性与稳定性。

weixin_29219539的博客 273

Mybatis中pagehelper分页插件PageInfo对象详解

用法示例 /** * 分页查询 * @param pageIndex 页码 * @param pageSize 页大小 * @return */ public PageInfo selPage(int pageIndex, int pageSize) { PageHelper.startPage(pageIndex,pageSize); PageInfo pageInfo = new PageInfo(fruitDa

Dr_Tang_的博客 2956

开源数显表

开源数显表,广泛应用于车床、铣床、磨床、镗床、火花机、线切割等。市面上此类液晶数显表多数都是基于此项目。 一、基本配置 硬件 主控:STM32F407VGT6 LCD:群创AT070TN92 显示驱动:RA8875 光栅尺:3 x 输入(X/Y/Z) 串口:1 x MAX3232 继电器:2 x 输出 存储:AT24C64 模拟输入:LM324C 电源:AC 220V 软件 工程版本:Keil 5 STM32库:V1.4.0 图形界面:uCGUI 多语言支持:中文、英文 二、项目文

m0_70934529的博客 435

STM32CubeMx+stm32f407+FreeRTOS+LAN8720实现LWIP以太网UDP TCP数据收发功能

单片机实现LWIP的调试

qq_40600203的博客 3068

MyBatis_02_Page&PageInfo

这儿的内容,完全照抄自【Page和PageInfo】,该文的作者是【程序员^晓洋两者都能获取到数据,Page是一个ArrayListList。PageInfo是一个对象,能获取到的数据比Page多;

故常无,欲以观其妙;常有,欲以观其徼; 1039

小样本学习概述

目录 前言 小样本学习存在的意义? 什么是小样本学习? 小样本学习的方法有哪些? 结语 前言 小样本学习(Few-Shot Learning)是近几年兴起的一个研究领域,小样本学习旨在解决在数据有限的机器学习任务。 小样本学习存在的意义? 近些年,以深度卷积神经网络为代表的深度学习方法在各类机器学习任务上取得了优异的成绩——很多任务上已经超越了人类表现。狂欢背后,危机四伏。因为这些深度学习方法work的关键之一是海量标注数据的支持。 但是在工业界,很多时候难以获得海量的训练数据,更.

DwD-的博客 3万+

struts 下面的页面分页显示的实现(之一)

    本应用的实现的过程是根据读取当前页面号码和发出请求页面的相对偏移值, 在数据库中读取指定数量的记录并以HashMap对象形式封装到一个List,其中每条记录中的各列以Object实例形式存于前面所讲的HashMap对象中.这样做的好处是便于代码的重用性, 我们可以用它做任何记录集片段的读取,而不必做任何代码的修改,你要做的就是根据你的具体需要单独写个类调用本分页类.    由于这次实现设计

Cendy.Chen的专栏 1038

1.用Python写了一个进销存管理的软件~需求分析&界面设计&数据库设计&技术路线选择~

前端也打算用Python来写,查了很多的python库,大家比较推荐的是wxpython和QPython,之前接触过一点点的QT,确实非常强大,但是库比较重量级,自己写的这个东西明显配不上QT,又详细调研了一下wxpython,就是它了!

pepper_lihui的专栏 4321

真格量化-bs套利

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import * #开始时间,用于初始化一些参数 def OnStart(context) : context.myacc = None #登录交易账号 if context.accounts["回测期权"].Login() : co.

qq_26742269的博客 1320

Struts实现分页显示数据

//操作的数据库中的表名为:UserInfo,有三个属性:userId,userName,userPassword(顾名思义) 首先为UserInfo表构造一个相对应的JavaBean,UserInfo.java(因为要贴的代码过多,这个就省略了)。  现在正式开始:新建名为:LendDao.java 的java类,其中有两个方法,一个是用来获得,分页后,每一页应该显示的内容( sel

izhouxiaofei的博客 4869

OpenClaw(Clawdbot/Moltbot)如何正确的配置浏览器,实现对浏览器的自动化操作功能(浏览器状态为running:false怎么办)

OpenClaw(Clawdbot/Moltbot)浏览器自动化功能无效?🤖 本文详细介绍如何解决这个问题🔧,让你的OpenClaw(Clawdbot/Moltbot)真正具备"睁眼看世界"的能力,支持网页搜索、点击操作和截图等功能 ✅

XiaoqiangClub的博客 8107

解决Struts分页显示

学习Struts已经有2个多月了,前几天群里的朋友问我Struts分页显示的问题,觉得好像与在jsp中的差不多,但还是遇到了这样那样的问题,好不容易花了几天时间把问题都搞清楚,觉得还是写点东西跟大家分享一下的好! 至于Struts的语法这里就不多介绍了,不懂的朋友可以先看网上的其他文章。 一 开发环境 Elicpse+Struts Studio+SqlServer2000+Tomcat。 二 开发

为理想而奋斗 8823

java毕设:基于springboot的服装搭配推荐系统(springboot+layui+jq+html)1011

项目描述 基于springboot的服装搭配推荐系统: 基于天气服装搭配推荐系统为用户提供未来一周的天气预报情况,并根据预报天气和用户现有的服装进行着装搭配,以及显示未来6小时精确温度数据为用户提供更精确的天气信息便于用户在出行前对自己的着装进行调整,每日用户可以根据自己当日对系统推荐的着装搭配舒适度进行反馈,系统将根据用户的反馈对用户着装的保暖系数进行相应调整,通过多次的反馈和调整形成对用户着装的个体化和精确化的推荐。 本系统可以为用户提供以下服务: 1.未来五天的天气信息显示; 2.未来六小时内天气温度

qq_2537071370的博客 3646

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Struts2+Hibernate 实现数据分页

Struts2+Hibernate 实现数据分页 1.用Hibernate实现分页技术: /** * 使用hql语句进行分页查询 * @param hql 需要查询的hql语句 * @param offset 第一条记录索引 * @param pageSize 每页需要显示的记录数 * @return 当前页的所有记录 */ @SuppressWarn

TKD03072010的专栏 6519

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

解决Struts分页显示(z)

解决Struts分页显示作者:李敏强  学习Struts已经有2个多月了,前几天群里的朋友问我Struts分页显示的问题,觉得好像与在jsp中的差不多,但还是遇到了这样那样的问题,好不容易花了几天时间把问题都搞清楚,觉得还是写点东西跟大家分享一下的好!至于Struts的语法这里就不多介绍了,不懂的朋友可以先看网上的其他文章。一 开发环境Elicpse+Struts Studio+SqlServer

null 1387

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Struts检索结果分页显示的设计

Struts的MVC结构就是围绕ActionForm、Action、JSP、ActionForward以及各种business beans来设计的。Bean处理后的结果提交给JSP显示时,很可能由于数据行数比较多,需要分页显示。进行分页显示需要知道几个相关参数:需要显示的结果集(一般是数组)、总计分页的页面数量、当前显示的页面编号、该页面显示内容在结果集中的起止id。此外还需要提供在各个分页面之间

wangjian0325的专栏 1185

Struts中实现查询结果分页显示

messagelist.do -> messagelist.jsp 用 messagelist.do?start=0 来显示第一个页面 参数说明:   list:信息列表   start:开始位置   page:每页显示的信息数目   previous:上页开始位置   next:下页开始位置 MessageListAction 里的 perform 是这样写的: ----------------

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 1758

Ajax进行删除更新分页显示页面(JSP+Struts2+Poolman)

Ajax进行删除更新分页显示页面 Ajax无刷新进行CURD (JSP+Struts2+Poolman)

天马行空的专栏 2886

怎么利用Struts进行分页处理

0.分页效果 我们希望实现这种分页效果,当在首页的时候,不显示上一页;当在尾页的时候,不显示

欧世乐 434

使用Struts2实现分页显示

在开发web程序时,从数据库中取出来的数据一般都要分页显示在页面上,分页显示的方法非常多,有人写自定义标签,用自己写的标签进行分页显示,我个人觉得这是一种比较好的方法。下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库...

anglela的博客 205
上一篇: 如何在JBuilder中运行手机jar程序
下一篇: 利用正则表达式检验邮政编码及电子邮件(E-MAIL)格式
系统信息
系统信息 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄23年 2404粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值