S2SH项目实现分页功能
javaWEB项目实现分页的方法很多,网上也有很多列子,最近工作中S2SH框架项目中需要一个分页的功能,查看了很多用一下方式实现,功能思路很清晰,觉得是很好的一种实现方法,记录下便多学习。
刚开始得到分页循环页数,但增加了跳转功能时,在select下拉框中总是重复循环最大页,通过查看代码修改,最终终于实现。解决思路就是需要增加一个跳转分页的javaBean,目的是封装成一个list,在得到页数后,在页面可以直接通过list的属性获取递增循环页数。
1.javaBean:
pageBean(分页类)
- public class PageBean {
- private List<实体类类名> list1; //返回某一页的记录列表
- private List<实体类类名> list2; //返回某一页的记录列表
- private int allRow; //总记录数
- private int pageSize; //每页记录数
- private int totalPage; //总页数
- private int currentPage; //当前页数
- private boolean isFirstPage; //是否为第一页
- private boolean isLastPage; //是否为最后一页
- private boolean hasPreviousPage; //是否有上一页
- private boolean hasNextPage; //是否有下一页
- /**
- * 初始化分页信息
- */
- public void init(){
- this.isFirstPage=isFirstPage();
- this.isLastPage=isLastPage();
- this.hasPreviousPage=isHasPreviousPage();
- this.hasNextPage=isHasNextPage();
- }
- /**
- * 判断分页信息,只需getter方法
- */
- public boolean isFirstPage(){
- return currentPage==1;
- }
- public boolean isLastPage(){
- return currentPage==totalPage;
- }
- public boolean isHasPreviousPage(){
- return currentPage!=1;
- }
- public boolean isHasNextPage(){
- return currentPage!=totalPage;
- }
- /**
- * 计算总页数,静态方法,供外部直接通过类名调用
- * @param pageSize 每页记录数
- * @param allRow 总记录数
- * @return 总页数
- */
- public static int countTotalPage(final int pageSize,final int allRow){
- int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;
- return totalPage;
- }
- /**
- * 计算当前页开始记录
- * @parampageSize每页记录数
- * @paramcurrentPage当前第几页
- * @return当前页开始记录号
- */
- public static int countOffset(final int pageSize,final int currentPage){
- final int offset = pageSize*(currentPage-1);
- return offset;
- }
- /**
- * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
- * @param page 传入的参数(可能为空,即0,则返回1)
- * @return 当前页
- */
- public static int countCurrentPage(int page){
- final int curPage = (page==0?1:page);
- return curPage;
- }
- public List<实体类类名> getList1() {
- return list1;
- }
- public void setList1(List<实体类类名> list1) {
- this.list1 = list1;
- }
- public List<实体类类名> getList2() {
- return list2;
- }
- public void setList2(List<实体类类名> list2) {
- this.list2 = list2;
- }
- public int getAllRow() {
- return allRow;
- }
- public void setAllRow(int allRow) {
- this.allRow = allRow;
- }
- public int getPageSize() {
- return pageSize;
- }
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
- public int getTotalPage() {
- return totalPage;
- }
- public void setTotalPage(int totalPage) {
- this.totalPage = totalPage;
- }
- public int getCurrentPage() {
- return currentPage;
- }
- public void setCurrentPage(int currentPage) {
- this.currentPage = currentPage;
- }
- }
pageNo(跳转时用到list属性封装类)
- public class PageNo {
- private int pageNumber; //跳转到第几页
- public int getPageNumber() {
- return pageNumber;
- }
- public void setPageNumber(int pageNumber) {
- this.pageNumber = pageNumber;
- }
- }
2.action
- @SuppressWarnings("serial")
- public class XxxAction extends ActionSupport implements Serializable {
- protected HttpSession getSession() {
- return ServletActionContext.getRequest().getSession();
- }
- private XxxService xxxService;
- public XxxService getXxxService() {
- return xxxService;
- }
- public void setXxxService(XxxService xxxService) {
- this.xxxService = xxxService;
- }
- private int page=1; //第几页
- private PageBean pageBean;
- public int getPage() {
- return page;
- }
- public void setPage(int page) {
- this.page = page;
- }
- public PageBean getPageBean() {
- return pageBean;
- }
- public void setPageBean(PageBean pageBean) {
- this.pageBean = pageBean;
- }
- private List<PageNo> numberList;
- private PageNo pageNo;
- public PageNo getPageNo() {
- return pageNo;
- }
- public void setPageNo(PageNo pageNo) {
- this.pageNo = pageNo;
- }
- /**
- * 列表并分页
- * @return
- */
- public String getListAndPage(){
- pageBean=xxxService.queryForPage(this,10,page);
- numberList=new ArrayList<PageNo>();
- if(pageBean.getTotalPage()>0){
- for(int i=0;i<pageBean.getTotalPage();i++){
- pageNo=new PageNo();
- pageNo.setPageNumber(i+1);
- numberList.add(i, pageNo);
- }
- }
- getSession().setAttribute("numberList", numberList);
- return "success";
- }
- }
3.service,serviceImpl,dao略
4.daoImpl
- public class XxxDaoImpl extends BaseDAO implements XxxDao {
- /**
- * 列表并分页
- */
- @SuppressWarnings("unchecked")
- public PageBean queryForPage(XxxAction version,int pageSize,int page) {
- Session session=getSession();
- try{
- String sql=" from Entity as entity where 1=1 ";
- Query query1=session.createQuery(sql);
- Query query2=session.createQuery(sql);
- List list1 = query1.list();
- int allRow=list1.size(); //总记录数
- int totalPage=PageBean.countTotalPage(pageSize, allRow); //总页数
- final int length=pageSize; //每页记录数
- final int currentPage=PageBean.countCurrentPage(page); //当前页,不要为0或url为空
- final int offset=PageBean.countOffset(pageSize, page);
- query2.setFirstResult(offset);
- query2.setMaxResults(length);
- List<PaiPubVersion> list2=query2.list();
- //把分页信息保存到Bean中
- PageBean pageBean = new PageBean();
- pageBean.setPageSize(pageSize);
- pageBean.setCurrentPage(currentPage);
- pageBean.setAllRow(allRow);
- pageBean.setTotalPage(totalPage);
- pageBean.setList2(list2);
- pageBean.init();
- return pageBean;
- }catch(RuntimeException re){
- throw re;
- }finally{
- if(session!=null){
- session.close();
- }
- }
- }
- }
5.jsp页面
- <td colspan="6">
- 共<s:property value="pageBean.allRow"/> 条记录
- 共<s:property value="pageBean.totalPage"/> 页
- 当前第<s:property value="pageBean.currentPage"/>页
- <s:if test="%{pageBean.currentPage == 1}">
- <input type="button" value="第一页" disabled="disabled" />
- <input type="button" value="上一页" disabled="disabled" />
- </s:if>
- <s:else>
- <input type="button" value="第一页" onclick="pageNo('1')"/>
- <input type="button" value="上一页" onclick="pageNo('<s:property value="%{pageBean.currentPage-1}"/>')"/>
- </s:else>
- <s:if test="%{pageBean.currentPage != pageBean.totalPage}">
- <input type="button" value="下一页" onclick="pageNo('<s:property value="%{pageBean.currentPage+1}"/>')"/>
- <input type="button" value="最后一页" onclick="pageNo('<s:property value="%{pageBean.totalPage}"/>')"/>
- </s:if>
- <s:else>
- <input type="button" value="下一页" disabled="disabled" />
- <input type="button" value="最后一页" disabled="disabled" />
- </s:else>
- 跳转到:
- <select id="gotoNo" name="gotoNo" onchange="onTiao()">
- <s:iterator value="#session.numberList">
- <s:if test="pageBean.currentPage eq pageNumber">
- <option value="<s:property value="pageNumber"/>" selected="selected" ><s:property value="pageNumber"/></option>
- </s:if>
- <s:else>
- <option value="<s:property value="pageNumber"/>"><s:property value="pageNumber"/></option>
- </s:else>
- </s:iterator>
- </select>
- 页
- </td>
6.js
- function pageNo(fenye){
- document.pageform.action="getListAndPage.action?page="+fenye;
- document.pageform.submit();
- }
- function onTiao(){
- var gotoNo = document.getElementById('gotoNo').value;
- document.pageform.action="getListAndPage.action?page="+gotoNo;
- document.pageform.submit();
- }
7.页面显示效果
S2SH项目实现分页功能的更多相关文章
- 基于SSM框架的简易的分页功能——包含maven项目的搭建
新人第一次发帖,有什么不对的地方请多多指教~~ 分页这个功能经常会被使用到,我之前学习的时候找了很多资源,可都看不懂(笨死算了),最后还是在朋友帮助下做出了这个分页.我现在把我所能想到的知识 做了一个 ...
- 项目中的一个分页功能pagination
项目中的一个分页功能pagination <script> //总页数 ; ; //分页总数量 $(function () { // $("#pagination"). ...
- DjangoRestFramework框架三种分页功能的实现 - 在DjangoStarter项目模板中封装
前言 继续Django后端开发系列文章.刚好遇到一个分页的需求,就记录一下. Django作为一个"全家桶"型的框架,本身啥都有,分页组件也是有的,但默认的分页组件没有对API开发 ...
- 简单封装分页功能pageView.js
分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...
- Asp.net MVC3表格共用分页功能
在建立的mvc3项目中,在Razor(CSHTML)视图引擎下,数据会在表格中自动的生成,但分页没有好的控件实现,这里我们开发了设计了一个分页的模板,适合于没有数据提交和有数据提交的分页的分页. 第一 ...
- WinForm DataGridView分页功能
WinForm 里面的DataGridView不像WebForm里面的GridView那样有自带的分页功能,需要自己写代码来实现分页,效果如下图: 分页控件 .CS: 1 using System; ...
- 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架
问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...
- python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法
python_way day18 html-day4 1.Django-路由系统 - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...
- Android学习随笔--ListView的分页功能
第一次写博客,可能格式,排版什么的会非常不美观,不过我主要是为了记录自己的Android学习之路,为了以后能有些东西回顾.既然是为了学习,那我肯定会吸收各位大大们的知道经验,有不足的地方请指出. 通过 ...
随机推荐
- 可能对Flutter应用程序开发有用的代码/库/专有技术列表
当我开始使用Flutter实施该应用程序时,我开始担心“如何最好地编写?”以及“如何使其更好地放置?”. 在这种情况下,您将需要参考GitHub上发布的代码和应用程序. 因此,我收集了似乎对Flu ...
- LIINQ TO JS
记录一下,方便自己查找... 自己在开发前端时,对于处理JSON,觉得真是枯燥.处理数据,基本都要循环. 所以我想着前端也能跟后端一样,有Linq来处理我的JSON对象就好了.上网一搜,找到了JSLI ...
- py02_03:py的数据类型
数据类型初识 1. 整数(int) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...
- TT(Tokyo Tyrant )介绍及使用
Tokyo Cabinet 是日本人 平林幹雄 开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley D ...
- Vue2生命周期
这是Vue文档里关于实例生命周期的解释图 那么下面我们来进行测试一下 <section id="app-8"> {{data}} </section> va ...
- 学习spring第一天
Spring第一天笔记 1. 说在前面 怎样的架构的程序,我们认为是一个优秀的架构? 我们考虑的标准:可维护性好,可扩展性好,性能. 什么叫可扩展性好? 答:就是可以做到,不断的增加代码,但是可以 ...
- IdentityServer4之Token令牌获取流程分析
1.asp.net core 是基于管道模式IdentityServer会在注册一个管道处理程序 IdentityServerMiddleware 类专门处理登录验证的逻辑,本次主要讲的是access ...
- ServletUtils
package com.ruoyi.common.utils; import java.io.IOException; import javax.servlet.http.HttpServletReq ...
- ruoyi StringUtils
package com.ruoyi.common.utils; import java.util.Collection; import java.util.Map; import com.ruoyi. ...
- MTF的倾斜边缘计算方法
光学系统性能的衡量方法有很多,常见的有点扩散函数法.瑞利判断法.点 列图法.光学传递函数(MTF)法等,其中 MTF 法在光学系统和镜头加工制造中 使用 最为广泛.MTF 曲线真实的反映了成像系统将物 ...