hibernate 数据分页显示 及 分页导航栏的设置
一个小案例 hibernate+struts2 对一个教室信息进行分页显示
类中的属性:当前页 pageNo
总页数 pageCount
每页的记录数 pageSize 初始化为4
分页按钮个数 btnCount 初始化为4
package model;public class Pager {private int pageNo;//当前页private int pageSize=4;//每页有都少数据private int pageCount;//总页数private int btnCount=4;//分页按钮个数public int getPageNo() {return pageNo;}public void setPageNo(int pageNo) {this.pageNo = pageNo;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getPageCount() {return pageCount;}public void setPageCount(int pageCount) {this.pageCount = pageCount;}public int getBtnCount() {return btnCount;}public void setBtnCount(int btnCount) {this.btnCount = btnCount;}}
二、在DAO中写方法
//拿到当前页码所有教室信息的方法@SuppressWarnings("unchecked")public List<Room> getAllRoomsByPageNo(Pager pager){String hql="from Room";//这里要创建一个事务,否则后边删除的时候会在页面显示上出现错误session=HibernateUtil.openSession();session.beginTransaction();Query query= session.createQuery(hql);//设置list为当前页的教室数据//(1)设置当前页起始数据是哪条数据query.setFirstResult((pager.getPageNo()-1)*pager.getPageSize());//(2)设置当前页的最大显示数据数量query.setMaxResults(pager.getPageSize());//这时候获得的list就是当前页的listList<Room> list=query.list();session.getTransaction().commit();session.close();return list;}
(2)设置最大(总)页数的方法中,是通过拿到所有记录数再除以每页显示的数据设置的。这里要加入不能整除的判断
//分页的时候计算总页数的方法@SuppressWarnings("unchecked")public void initPageCount(Pager pager){String hql="from Room";//这里要创建一个事务,否则后边删除的时候会在页面显示上出现错误session=HibernateUtil.openSession();session.beginTransaction();Query query= session.createQuery(hql);List<Room> list= query.list();//此时得到的是所有教室的信息//设置总共有多少页,这里在定义Pager类的时候初始化了一下每页有4条数据pager.setPageCount(list.size()/pager.getPageSize());if(list.size()%pager.getPageSize()>0){//如果总记录数和每页记录数不能整除,总页数加1pager.setPageCount(pager.getPageCount()+1);}session.getTransaction().commit();session.close();}
三、在Action的main方法中写代码。
if(cpage==0)
{
cpage=1
}
<s:if test="#ROOMS!=null">
<table class="bordered">
<tr><th>序号</th><th>教室名称</th><th>教室位置</th><th>删除</th><th>修改</th></tr>
<s:iterator value="#ROOMS" id="croom" status="st">
<tr><td>${st.index+1}</td><td>${croom.name}</td><td>${croom.address}</td>
<td><input type="button" value="删除" class="delete" lang="${croom.id}"/></td>
<td><input type="button" value="修改" class="modify" lang="${croom.id}"/></td>
</tr>
</s:iterator>
</table>
(3)在这里可以通过StringBulider的append方法去将导航栏做出来(字符串追加形成一个个超链接)。具体怎么设置详见代码。可以输出到控制台中看看自己写的标签对不对。 如果显示当前页的页码的时候也要有所区分。
所以在设置导航栏的时候,要根据初始化的 页码标签个数 设置一下显示 当前页的数据时,下面页码导航栏的页码 起始和终止的页数,这里还要注意当点击的是第一页和最后一页的时候显示页码的情况。这里暂时来回判断比较麻烦,希望阅读本文的读者可以指出更好的设计页码导航栏的方法。
//在后台管理点击跳转到room.jsp页面的方法,这里面添加了分页和添加分页导航栏的内容public String main(){//如果是从后台访问room.jsp页面,这里没有点击导航栏中的当前页码按钮,后台action中拿到当前页码为0,此时当做第一页处理//这时在DAO方法中去计算第几条开始的时候,如果当前页码为0,计算本页第一条数据是第几条记录的时候,出现负数错误,这里设置为第一页if(pageNo==0){pageNo=1;}ActionContext ctx= ActionContext.getContext();StringBuilder str=new StringBuilder();//为后边打印导航页码用//拿到request对象,然后拿到根目录String path=ServletActionContext.getRequest().getContextPath();//这里应该得到的是分页之后的当前页教室数据,应该在DAO方法中加入参数pager。//这里不加入action中定义的当前页属性,应该是把这个当前页属性设置到pager对象中,再传入pager,好使用这个类中的其他属性Pager pager=new Pager();//计算总页数rdao.initPageCount(pager);//将当前页这个属性(从前端传过来) 注入到一个Pager对象当中pager.setPageNo(pageNo);List<Room> list=rdao.getAllRoomsByPageNo(pager);//这里得到就是当前页的教室数据if(list.size()>0){//存放数据ctx.put("ROOMS", list);//设置页码导航栏int btns=pager.getBtnCount();//btns是每页显示的页码按钮数btns=btns/2;int start=pageNo-btns;//每一页页码按钮的开始int end=pageNo+btns;//每一页页码按钮结束//对页码进行判断if(start<1){start=1;end=start+btns*2;}if(end>pager.getPageCount()){end=pager.getPageCount();start=end-btns*2;}if(start<1){start=1;}//循环准备页码导航栏数据for(int i=start;i<=end;i++){str.append("<a href='"+ path +"/room/main?pageNo="+i+"'>");//如果显示当前页,要区别显示if(pageNo==i){str.append("<font color='yellow'><b>");str.append(i);str.append("</b></font>");}else{str.append(i);}str.append("</a>");str.append(" ");}str.append("<br>");ctx.put("NAVBAR", str.toString());//打印到输出台,看看是否输入错误System.out.println(str.toString());}return "roommain";}
hibernate 数据分页显示 及 分页导航栏的设置相关推荐
- 在ASP.NET中使用ListView控件对数据进行显示、分页和排序
最终效果图如下所示: 使用ListView控件是不需要写代码的,下面我们来看一下ListView的操作流程: 1.首先新建一个ASP窗体 2.然后拖入一个ListView和一个SqlDataSourc ...
- Jupyter Notebook——如何显示目录的导航栏(安装 Jupyter Notebook extension)
1 致谢 感谢钟老师的指点~ 2 前言 今天钟老师在群里面说,可以安装 Jupyter Notebook extension来显示目录的导航栏,效果是这样的, 感觉还挺不错的~ 3 安装 Jupyte ...
- 微信小程序标题栏和导航栏的设置 —— 微信小程序教程系列(7)
设置标题栏 标题栏window 在app.json文件里面,通过window对象里面的属性进行设置 示例: app.json: 运行: 设置导航栏 导航栏TabBar 如果我们的小程序是一个多 tab ...
- 网站导航栏如何设置更利于提升SEO优化效果?
网站导航栏就像是用户浏览网站的"指南针",能够方便访客更直观的了解自己所在的位置,也能让访客更快速的找到想要了解的栏目.那么,导航栏该如何设置才能更利于SEO优化效果提升呢? 1. ...
- 小程序导航栏颜色设置
导航栏的设置 在实际的开发过程中,窗口页面的颜色是多样的,小程序默认的导航栏颜色不能满足我们的开发需求,需要自己去设置,刚好,小程序官方文档里提供了解决方法. 在app.json中可以配置全局(默认) ...
- 微信小程序navigationBarTitleText导航栏标题设置
微信小程序navigationBarTitleText导航栏标题设置 全局设置 app.json "window": { "navigationBarTextStyle& ...
- navigation导航中导航栏的设置
参看:http://blog.csdn.net/mad1989/article/details/41516743 使用导航navigation时,下一页的标题的设置 1.在进入push下一页时,指定标 ...
- 微信小程序自定义导航栏单独设置某些页面胶囊背景色,微信小程序setNavigationBarColor无效,微信小程序更改右上角按钮背景色
前言 我们的小程序导航栏全局用的自定义导航,其中某两个页面的导航栏要有那种科技范儿,将导航栏背景设置成了透明背景,这样导航栏的背景色就跟着页面的背景走了,但是就是右上角的胶囊颜色不跟着变,用微信小程序 ...
- 微信小程序导航栏的设置
1.在app.json中设置"tabBar":{} 2.tabBar的属性有 3.其中list为导航栏的设置,它的属性为 4.下面是例子: 效果 代码: "tabBar& ...
- uni-app 导航栏透明设置
uni-app 导航栏透明设置 1.pages.json的style中配置 {"path": "pages/shop/shop","style&quo ...
最新文章
- 写代码时发现......还得是 SpringBoot !一篇拿下
- Java程序调用ssh, scp, sftp
- Docker学习之路 用commit命令创建镜像
- how to extend odata service
- android 嵌套分组拖动_GitHub - Mosect/DragLayout: Android拖拽控件,支持上下左右滑动、折叠或者嵌套ListView、RecyclerView等...
- redux异步action_react-redux--异步Action
- 弹性文件服务解密 -- 应用场景区分
- 送专利啦~~ .Net高阶异常处理之TopLevelEH
- Bailian3258 兔子产子【递推+打表】
- mysql:分组中某字段最大值的查询结果
- java velocity 语法_Velocity的基本语法
- Ascll完整码表(256个)
- 无公式搞懂GMSK调制原理,附详细注释的matlab GMSK调制解调原理仿真源码
- gb28181简单实现sip信令服务器(java版基于springboot):三、sip摄像头注册(代码实现)
- 盘点华为系工控企业——中国A股上市公司最多的创业体系
- NO_PROXY is not set
- DMA工作原理-STM32 DMA和ARM9 DMA,彻底理解DMA
- 福昕PDF不可编辑解决方法
- 为什么重写Equals方法要重写HashCode方法
- nginx配置区分移动端和PC端,访问不同域名