技术标签: java分页的工具类
以前做分页的时候是每个需要分页的action下面写一大串分页的代码,今天就想可不可以将分页的代码单独写一个工具类,这样就可以随用随取了,所以就做出来了,把代码分享给大家,复制到你们的项目下面就可以直接用了
问题一:为什么要用工具类?
答:在我们的开发过程中有很多重复冗余的代码,将他们写在一个类里,当需要的时候调用就好,这样就提高了效率,减少了代码的冗余,减少了代码的耦合性
问题二:分页的工具类有什么好处?
答:好处当然很多,话不多说,你们自己看
1、写工具类前String pageNum_1=null;
//获取传递的参数,因为urlrewrite所以都传给tagname了
if(tags.getTagname().indexOf("/")>0){
String[] params=tags.getTagname().split("/");
tags.setTagname(params[0]);
pageNum_1=params[1];
}
/*查找热门文章*/
//设置初始序号
int orderNum=0;
article.setOrderNum(orderNum);
//查找前十的文章
List hotArticle=articleService.findHotArticle(article);
/*分页*/
//初始页码
int pageNum=1;
//计算,当传回来的有值时
if(pageNum_1!=null){
pageNum=Integer.parseInt(pageNum_1);
}
//每页条数
int currentPage=10;
//计算后的开始条数
int startPage=(pageNum-1)*currentPage;
//计算该标签下的总条数
int totalCount=articleService.findTagsArtCount(tags);
//计算总页数
int totalPage;
if(totalCount%currentPage>0){
totalPage=(totalCount/currentPage)+1;
}else{
totalPage=totalCount/currentPage;
}
//开始页数
if(pageNum>=5){
//如果大于5则是当前页数页数减3
tags.setBegin(pageNum-2);
}else{
//如果小于5则从一开始
tags.setBegin(1);
}
//结束页数
if(pageNum>5){
if(totalPage>=pageNum){
//用switch算结束
switch(totalPage-pageNum){
case 0:tags.setEnd(pageNum);break;
case 1:tags.setEnd(pageNum+1);break;
case 2:tags.setEnd(pageNum+2);break;
case 3:tags.setEnd(pageNum+3);break;
default:tags.setEnd(pageNum+3);
}
}else{
tags.setEnd(totalPage);
}
}else{
if(totalPage>5){
//用switch算结束
switch(totalPage-5){
default:tags.setEnd(6);
}
}else{
tags.setEnd(totalPage);
}
}
tags.setStartPage(startPage);
tags.setTotalCount(totalCount);
tags.setTotalPage(totalPage);
tags.setPageNum(pageNum);
tags.setCurrentPage(currentPage);
2、写工具类后/*分页*/
//初始页码
//页面请求页码数
String pageNum_1=request.getParameter("pageNum");
//获取数据库总条数
int totalCount=articleService.findCount(article);
//设置每页条数
int currentPage=10;
Page page=new Page();
pb=page.pagetool(pageNum_1, currentPage, totalCount);
效果很明显吧,好了,下面把教程贴出来
开发过程
一、建立一个分页bean,这里有所有分页需要用到的属性/**
*
*
Title:PageBean
*
Description: 分页需要的bean
* @author 任汉东
* @date 2017年5月24日下午5:38:44
*/
public class PageBean extends User{
private int pageNum; // 页码
private int currentPage; // 每页条数
private int totalPage; // 总页数
private int totalCount; // 总条数
private int startPage;//limit开始条数
private int begin;//foreach中的begin
private int end;//foreach里的end值
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getBegin() {
return begin;
}
public void setBegin(int begin) {
this.begin = begin;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
二、建立一个分页的工具类,这里叫Page,然后在里面写一个pagetool方法供我们调用,这里我都写注释了,代码可以直接复制使用/**
*
*
Title:Page
*
Description: 分页的工具类
* @author 任汉东
* @date 2018年7月31日上午1:31:17
*/
public class Page {
//分页的方法
public PageBean pagetool(String pageNum_1,int currentPage,int totalCount){
//传入三个必要值:1、页面请求的页码,2、每页需要几条数据,3、数据库总条数
//实例化分页bean
PageBean pagebean=new PageBean();
//初始页码
int pageNum=1;
//计算,当传回来的有值时
if(pageNum_1!=null){
pageNum=Integer.parseInt(pageNum_1);
}
//每页条数
//计算后的开始条数
int startPage=(pageNum-1)*currentPage;
//总条数
//计算总页数
int totalPage;
if(totalCount%currentPage>0){
totalPage=(totalCount/currentPage)+1;
}else{
totalPage=totalCount/currentPage;
}
//开始页数具体算法
if(pageNum>=5){
//如果大于5则是当前页数页数减3
pagebean.setBegin(pageNum-2);
}else{
//如果小于5则从一开始
pagebean.setBegin(1);
}
//结束页数具体算法,这里是显示前6页,根据自己项目需求更改
if(pageNum>5){
if(totalPage>=pageNum){
//用switch算结束
switch(totalPage-pageNum){
case 0:pagebean.setEnd(pageNum);break;
case 1:pagebean.setEnd(pageNum+1);break;
case 2:pagebean.setEnd(pageNum+2);break;
case 3:pagebean.setEnd(pageNum+3);break;
default:pagebean.setEnd(pageNum+3);
}
}else{
pagebean.setEnd(totalPage);
}
}else{
if(totalPage>5){
//用switch算结束
switch(totalPage-5){
default:pagebean.setEnd(6);
}
}else{
pagebean.setEnd(totalPage);
}
}
//将前端页面需要数据set进pagebean
pagebean.setStartPage(startPage);
pagebean.setTotalCount(totalCount);
pagebean.setTotalPage(totalPage);
pagebean.setPageNum(pageNum);
pagebean.setCurrentPage(currentPage);
return pagebean;
}
三、测试,这里写了一个main方法进行测试public static void main(String[] args) {
Page page=new Page();
PageBean pagebean=new PageBean();
//这里前端请求的页码必须为string,不然无法确认是否为空
String pagenum_1="3";
pagebean=page.pagetool(pagenum_1, 10, 128);
System.out.println("开始条数:"+pagebean.getStartPage());
System.out.println("每页条数:"+pagebean.getCurrentPage());
System.out.println("总条数:"+pagebean.getTotalCount());
System.out.println("请求的页码:"+pagebean.getPageNum());
System.out.println("总页数:"+pagebean.getTotalPage());
System.out.println("foreach中begin值:"+pagebean.getBegin());
System.out.println("foreach中end值:"+pagebean.getEnd());
}
这里我们传入请求页码为第三页,每页10条数据,数据库总数据为128条,得到如下结果开始条数:20
每页条数:10
总条数:128
请求的页码:3
总页数:13
foreach中begin值:1
foreach中end值:6
四、调用分页工具类,在需要的action进行调用即可/*分页*/
//初始页码
//页面请求的页码数
String pageNum_1=request.getParameter("pageNum");
//获取数据库总条数,自行用jdbc获取
int totalCount=articleService.findCount(article);
//设置每页条数
int currentPage=10;
//实例化工具类
Page page=new Page();
//调用方法将得到的数据存到pagebean中
pb=page.pagetool(pageNum_1, currentPage, totalCount);
//。。。。。。
//。。。。
//接下来就可以用获得的数据为所欲为了。。。
五、前端调用返回数据,在这里核心是用foreach调用,都写了注释所以比较乱,具体是用就是用在后台获取的begin和end值来控制分页页码的显示,然后用if判断遍历的数值和在后台获取的当前页码是否相等,相等就高亮显示,否则不高亮显示
OK,这样就完成了对分页工具类的开发了,代码可以直接拿去用,按照我说的方法,绝对可以成功
你还没有登录,请先使用 QQ登录 或 注册!
文章评论
发表评论
仿爱奇艺/腾讯视频ViewPager导航条实现,支持自定义导航条高度,宽度,颜色变化,字体大小变化。支持多种滚动模式,支持自定义每个TabView的样式。项目地址:DynamicPagerIndicator一、如何引入DynamicPagerIndicator?在module的build.gradle 添加:compile 'com.kcrason:dynamicpagerindicat...
展开全部isEmpty() 和e68a843231313335323631343130323136353331333431373864(list.size() == 0)都是判断List内容是否为空。null判断是判断有没有对list集合分配内存空间,而不是list里面内容是否为空。比如,new一个user对象,判断user的list内容是否为空,出现异常。这是因为,使用isEmpty()和si...
这是土盐的第150篇原创文章1大家好,我是土盐。周日晚上把自己看《自己动手写python虚拟机》遇到的误读点、字符错误和排版问题,整理成了word并邮箱戳给了作者海纳。海纳回复,知乎上在维...
如何备考系统分析师与架构师考试
同事,给了一个蓝屏文件,说是不知道操作什么了引起了系统蓝屏,使用自定义分析可看到MEMORY_MANAGEMENT (1a) # Any other values for parameter 1 must be individually examined.Arguments:Arg1: 0000000000001010, The caller is unlocking a pageable section that is not currently locked. (This sectio
Android 工程中有时候需要混淆,减少包大小及增加反编译难度。AS中创建工程时默认创建了proguard-android.txt文件,自己如果需要增加一些第三方库需要自己在proguard-rules.txt文件中配置混淆文件。ProGuard简介 JAVA中默认使用ProGuard进行混淆。ProGuard能够对Java类中的代码进行压缩(Shrink),优
这是一个系统架构设计师的简明教程,可以快速掌握高频考点和应试技巧,适合想要一次通关的同学!
当使用C++做HTTP客户端时,目前通用的做法就是使用libcurl。其官方网站的地址是http://curl.haxx.se/,该网站主要提供了Curl和libcurl。Curl是命令行工具,用于完成FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP的命令的请求及接收回馈。libcurl提供给开发者,用于使用C++跨平台的开发各种...
1、let和var的异同(1)不同之处js块级作用域:使用var 关键字声明的变量不具备块级作用域的特性,它在 {} 外依然能被访问到。{ var x = 2; }// 这里可以使用 x 变量let 声明的变量只在 let 命令所在的代码块{}内有效,在{}之外不能访问。{ let x = 2;}// 这里不能使用 x 变量循环作用域:使用var在循环体内定义的变量可以作用于循环体内外,而使用let在循环体内定义的变量只作用于循环体内...
1. 将/prebuild/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-gdb 拷贝到/usr/local/bin下2. 进入out/target/product/工程名xxx/obj/KERNEL_OBJ 目录,找到文件vmlinux3. 执行arm-linux-androide...
总结:Linux下安装单机并行lammps○.机器配置:1.处理器:Intel XEON × 22.主板:Intel S5500BC3.内存:金士顿4G × 64.操作系统:Redhat Enterprise 5.3 x86_64一.下载需要的源文件fftw-2.1.5.tar.gzmpich2-1.0.2p1.tar.gzlammps-1Dec10.tar.gz并以root身份(以下均在root...
本文翻译自Netflix工程师合著的 *Chaos Engineering*一书。这本书介绍了混沌工程的主要概念,以及如何在组织中实践这些概念和经验。也许我们开发的相关工具只适用于Netflix自身的业务和系统环境,但我们相信工具背后的原则可以更广泛地应用于其他领域。InfoQ 将就这一专题持续出稿,感兴趣的同学可以持续关注。本文略长,共计1.3万字,预计阅读时间35分钟。混沌工程原则优化复杂系统...