Java实现分页功能 代码很粗糙,都是根据自己所需去定义逻辑功能的。

1.首先定义了一个PageUtil的类,看了网上的很多教程,貌似都有一个这样的类,自己也定义了一个。在代码编写过程中发现这个类其实也没有那么大的作用,但是不去定义这个类,感觉好像缺少什么似得。(请高手解释下这个类的存在的意义。)

 1 package com.util;
 2
 3 public class PageUtil {
 4     private int totalRows;  //总的记录数
 5     private int curPage;    //当前页码
 6     private int pageSize;   //每页记录数
 7     private int totalPages;
 8     public PageUtil(int totalRows, int curPage, int pageSize) {
 9         super();
10         this.totalRows = totalRows;
11         this.curPage = curPage;
12         this.pageSize = pageSize;
13     }
14     public PageUtil(int totalRows, int pageSize) {
15         this.totalRows=totalRows;
16         this.pageSize=pageSize;
17     }
18
19     //总页数
20     public int getTotalPages() {
21         return totalRows%pageSize==0?totalRows/pageSize:totalRows/pageSize+1;
22     }
23     public int getTotalRows() {
24         return totalRows;
25     }
26     public void setTotalRows(int totalRows) {
27         this.totalRows = totalRows;
28     }
29     public int getCurPage() {
30         return curPage;
31     }
32     public void setCurPage(int curPage) {
33         this.curPage = curPage;
34     }
35     public int getPageSize() {
36         return pageSize;
37     }
38     public void setPageSize(int pageSize) {
39         this.pageSize = pageSize;
40     }
41     public void setTotalPages(int totalPages) {
42         this.totalPages = totalPages;
43     }
44
45 }

2. 自己根据所需的功能提供了一个QueryList的action类。

1 package com.action;
 2
 3 import java.util.List;
 4
 5 import javax.servlet.http.HttpSession;
 6
 7 import org.apache.struts2.ServletActionContext;
 8
 9 import com.bean.Student;
10 import com.daoImpl.DaoImpl;
11 import com.opensymphony.xwork2.ActionSupport;
12 import com.util.PageUtil;
13
14 public class QueryAll extends ActionSupport {
15     private final static int pageSize=8;
16     private DaoImpl daoImpl=new DaoImpl();
17     private PageUtil pageUtil;
18     private int rows;
19
20     private int curPage;
21     public void setCurPage(int curPage) {
22         this.curPage = curPage;
23     }
24
25     public String execute() throws Exception {
26         rows=daoImpl.getTotalRows();
27         pageUtil=new PageUtil(rows, pageSize);
28         if(curPage>pageUtil.getTotalPages()){
29             pageUtil.setCurPage(pageUtil.getTotalPages());
30         }
31         else if(curPage>0) {
32             pageUtil.setCurPage(curPage);
33         }else {
34             pageUtil.setCurPage(1);
35         }
36
37         //test
38         List<Student> studetnsInfo=daoImpl.queryList(pageUtil.getPageSize(), pageUtil.getCurPage());
39         System.out.println(studetnsInfo.size());
40
41         HttpSession session=ServletActionContext.getRequest().getSession();
42
43         session.setAttribute("list", studetnsInfo);
44         session.setAttribute("curPage", pageUtil.getCurPage());
45
46         return SUCCESS;
47     }
48
50 }

这里把前台所需的信息放在session里面,提供给前台使用。控制逻辑上当访问首页之前和尾页之后的页面的时候,自动定位到首页和尾页。

附上queryList()方法的代码。

 1     public List<Student> queryList(int pageSize, int curPage) {
 2         List<Student> list=new ArrayList<>();
 3         Student stu;
 4         String sql="select * from classa limit "+pageSize*(curPage-1)+", "+pageSize;
 5         try {
 6             con=JDBC_Connection.getConnection();
 7             statement=con.createStatement();
 8
 9             res=statement.executeQuery(sql);
10             while(res.next()){
11                 stu=new Student(res.getString(1), res.getString(2), res.getString(3), res.getDouble(4), res.getDouble(5));
12                 list.add(stu);
13             }
14         } catch (SQLException e) {
15             e.printStackTrace();
16         }
17         try {
18             destory();
19         } catch (Exception e) {
20             e.printStackTrace();
21         }
22         return list;
23     }

3.前端页面自己不是太懂,随便写了展示jsp页面。

 1 <body>
 2     <%
 3         int curPage=0;
 4
 5         if(session.getAttribute("curPage")!=null)
 6         curPage=(int)session.getAttribute("curPage");
 7     %>
 8     <form action="queryAll" method="post">
 9         <table width="98%" align="center" cellpadding="1" cellspacing="1" border="1">
10             <tr align="center">
11                 <td width="5%">学号</td>
12                 <td width="5%">姓名</td>
13                 <td>学术贡献</td>
14                 <td width="5%">scoreA</td>
15                 <td width="5%">socreB</td>
16             </tr>
17             <s:iterator var="stu" value="#session.list" >
18             <tr>
19                 <td>${stu.stuNo}</td>
20                 <td>${stu.name}</td>
21                 <td>${stu.detialInfo}</td>
22                 <td>${stu.scoreA}</td>
23                 <td>${stu.socreB}</td>
24             </tr>
25             </s:iterator>
26
27         </table>
28
29         <div align="right" style="color: red;">
30             <a href="queryAll?curPage=<%=curPage-1%>">上一页</a>/
31             <a href="queryAll?curPage=<%=curPage+1%>">下一页</a>
32         </div>
33
34
35     </form>
36
37 </body>
时间: 2024-08-27 18:55:49

Java实现分页功能 代码很粗糙,都是根据自己所需去定义逻辑功能的。的相关文章

java反射并不是什么高深技术,面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象

java反射并不是什么高深技术,面向对象语言都有这个功能. 面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象,去获取类相关的信息 2.利用java反射可以调用类的私有方法么?private()方法 答:可以,class取出method,method继承executable类,executable类继承AccessibleObject类,AccessibleObject有个setAccessiable()设置这个方法是否可访问. 则设置成true,就可将pr

Java UDP实现聊天功能代码

我以前经常写的是基于TCP的网络编程,由于TCP建立连接鼻血要经过三次握手连接,服务器端需要阻塞式等待客户端的连接.而UDP则是可以直接向目的地址的目的端口上发送数据包,由于它只负责发送出去就好,不管对方是否正确接受到与否,所以当网络性能不好时它容易出现丢包的问题.(注意:UDP是基于数据报为单位进行传输的,而TCP是一种基于流进行传输的) 但是UDP很好的模拟了我们呢平时聊天的方式,可以很好的实现连续多次发送和接受,也就是简单的QQ聊天的功能. 现在来简要介绍Java中有关UDP编程相关的类:

目瞪口呆的 Java 代码技巧你都见过哪几种?

前言: 感谢大家观看本文,希望大家都能有所收获 导语: 从踏入社会以来本人就一直在做 Java 相关的工作,现在终于有时间坐下来,写一篇关于 Java 写法的一篇文章,来探讨一下如果你真的是一个 Java 程序员,那你真的会写 Java 吗? 笔者是一个务实的程序员,故本文绝非扯淡文章,文中内容都是干货,望读者看后,能有所收获. 本文不是一个吹嘘的文章,不会讲很多高深的架构,相反,会讲解很多基础的问题和写法问题,如果读者自认为基础问题和写法问题都是不是问题,那请忽略这篇文章,节省出时间去做一些有

ReSharper的功能真的很强大主要是针对代码规范和优化,园子里介绍的也不少,如果你没有安装,那我只能表示你们会相见恨晚

二.ReSHarper 代码规范.单元测试.... ReSharper的功能真的很强大,主要是针对代码规范和优化,园子里介绍的也不少,如果你没有安装,那我只能表示你们会相见恨晚! 1.像命名不规范,foreach转化为linq, 用var来命名,出名的Ctrl+alt+Enter 自动修改,清除多余的变量和引用,Ctrl+K+D(这是VS自带的,搞错了)文档对齐,Ctrl+R+R 命名替换 等等我就不再多说了.用过的人都知道. 2.关键是这个货居然还能调整CSS. 比如: 比自己敲要来的快,当然

电视盒子开机自启动wifi热点功能代码,貌似路由器都能省了。。。

现在用有线连网看视频速度要比经过路由器快,用无线做热点,但无线设置热点后,关机或重启又要再重新开启热点,这样比较麻烦,增加上开机自启热点,这样比较方便了,连网速度快看视频不卡其它设备也可以通过盒子上网. 开发工具 android ADT 实现方法 1.开启热点 2.开机启动 具体代码 1.开启热点 WifiManager wifiManager; wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); Method

JS代码大全 (都是网上看到 自己整理的)

原文 JS代码大全 (都是网上看到 自己整理的) 事件源对象 event.srcElement.tagName  event.srcElement.type 捕获释放 event.srcElement.setCapture();   event.srcElement.releaseCapture(); 事件按键 event.keyCode  event.shiftKey  event.altKey  event.ctrlKey 事件返回值 event.returnValue 鼠标位置 event

java MongoDB分页优化

最近项目在做网站用户数据新访客统计,数据存储在MongoDB中,统计的数据其实也并不是很大,1000W上下,但是公司只配给我4G内存的电脑,让我程序跑起来气喘吁吁...很是疲惫不堪. 最常见的问题莫过于查询MongoDB内存溢出,没办法只能分页查询.这种思想大家可能都会想到,但是如何分页,确实多有门道! 网上用的最多的,也是最常见的分页采用的是skip+limit这种组合方式,这种方式对付小数据倒也可以,但是对付上几百上千万的大数据,却只能望而兴叹... 经过网上各种查找资料,寻师问道的,发现了

[转]Java多线程学习(总结很详细!!!)

Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的线程函数用法.概述等.首先让我们来了解下在操作系统中进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,

重点|183道Java面试题可以说很详细了

链接:http://t.cn/AiDMxg6g Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别(String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象.因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别