1.dao层
首先从后台开始说起,后台使用两个公用的后台方法来实现所有的分页后台代码的共用,具体如下:
public QueryMemList findMember(final int page,TMarketingConditionCstm marketingConditionCstm){
final String querySqlFinal =”sql语句”;
// 分页查询会员
List<SmsMember> list = (List<SmsMember>) getHibernateTemplate()
.executeWithNativeSession(new HibernateCallback() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
return session.createSQLQuery(querySqlFinal)
.addScalar(
"idC").addScalar("nc").addScalar("mc")
.setResultTransformer(
Transformers
.aliasToBean(SmsMember.class))
.setFirstResult((page-1)*Constant.pagesize)
.setMaxResults(Constant.pagesize)
.list();
}
});
return list;
}
后台两个方法,一个是完成总的查询记录数,一个是完成相应页上的数据。
2.action层
在action层,我们只需要接收前台数据,并将我们的hql语句拼装好再传给service层即可。
在action类中,定义basePage类实例,并设置get和set方法,在具体实现方法中接收前台参数,核心代码如下:
private String queryflag;// 是否是点击查询的标志
// 分页对象
private BasePage basePage = new BasePage();
public BasePage getBasePage() {
return basePage;
}
public void setBasePage(BasePage basePage) {
this.basePage = basePage;
}
// 查询分页
public String findMember() throws Exception {
queryCondList = campaignService.findAllQueryCond();
QueryMemList queryMemList = new QueryMemList();
int page = 1;
// 点击查询时,标志位true,为了控制分页标签的显示
if(!"true".equals(queryflag)){
page = basePage.getPage();
}else{
basePage.setPage(1);
}
queryMemList = campaignService.findMember(page,marketingConditionCstm);
memList = queryMemList.getRelist();
basePage.setList(memList);-》分页查询的结果集
basePage.setRecordNum(queryMemList.getRecordNum());-》总记录数,这个地方应该查询总的记录数(如count(*)),需要改进
return "index";
}
3.分页的jsp页面
此页面是基于strusts2标签的。
因为在项目中所有的分页效果都一样,所以我用一个jsp页面去写所有的分页部分:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<div class="page-foot">
<s:if test="%{1==basePage.page||basePage.totalPage==0}">
[首页][上一页]
</s:if>
<s:else>
<a href="javascript:topage('1')">[首页]</a>
<a href="javascript:topage('${basePage.page-1}')">[上一页]</a>
</s:else>
<s:if test="%{basePage.totalPage==0}">
当前第0页
</s:if>
<s:else>当前第${basePage.page}页 |</s:else>
共${basePage.totalPage}页 |
<!-- 多加了判断|| basePage.totalPage ==0 -->
<s:if test="%{basePage.page==basePage.totalPage || basePage.totalPage ==0}">
[下一页][末页]
</s:if>
<s:else>
<a href="javascript:topage('${basePage.page+1 }')"> [下一页]</a>
<a href="javascript:topage('${basePage.totalPage }')"> [末页]</a>
</s:else>
</div>
在要分页的jsp页面
4.使用分页的jsp页面
核心的代码:%@include file="paging.jsp"% ----à引入分页jsp
<s:form method="post" id="selectform" action="findMember"
namespace="/campaign"> 当前页
<s:hidden name="basePage.page" id="page" />
。。。。。。。。。。。。
<!-- 查询的标志 -->
<input type="hidden" name='queryflag'
value="" id="flag" />
</s:form>
5.js
点击到哪一页的连接时,如上一页
function topage(page){
document.getElementById("page").value=page;
$("#selectform").submit();
}
点击查询时,设置一个标志,为了控制当前页的显示
$("#cselect").click(function(){
$("#flag").val("true");
$("#selectform").submit();
});
6.封装分页的基类
public class BasePage {
private int page=1;//当前页默认为1
private int pageSize=Constant.pageSize;//没有显示的记录数
private List list;//查询的结果集
private int totalPage = 0;//加入默认值0,总页数
private int recordNum = 0;//加入默认值0,总记录数
public int getRecordNum() {
return recordNum;
}
public void setRecordNum(int recordNum) {
this.recordNum = recordNum;
totalPage=recordNum%pageSize==0?recordNum/pageSize:recordNum/pageSize+1;
}
public int getTotalPage() {
return totalPage;
}
public int getPage() {
return page;
}
public void setPage(int page) {
if(page<1){
this.page=1;
}else{
this.page = page;
}
}
public int getPageSize() {
return pageSize;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
}
在BasePage中,定义一个page属性,用于标记当前页,默认为1。定义一个pageSize的属性,用于标记每页显示多少个数据,用于此项需要结合具体情况看,所以从我们配置的常量类中获得。list属性用于封装要在前台显示的数据。totalPage属性用于标记总得页数。recordNum用于标记总记录数,用于计算totalPage。
分享到:
相关推荐
MyFaces Oracle大数据表分页封装.docx
php实现数据分页封装,适合新手更好理解分页流程。看完之后你会觉得分页实现真tm简单
分页封装类
分页封装
教学-传智播客-项目视频经典之作巴巴运动网106集-28将Web层分页封装成通用模块源代码 所需要的jar文件: (一)、Hibernate: 位于 "\hibernate-distribution-3.3.2.GA" 目录下的jar文件: hibernate3.jar 位于 "\...
教学-传智播客-项目视频经典之作巴巴运动网106集-28将Web层分页封装成通用模块源代码 所需要的jar文件: (一)、Hibernate: 位于 "\hibernate-distribution-3.3.2.GA" 目录下的jar文件: hibernate3.jar 位于 "\...
js实现的异步分页封装,可以在一个页面内实现多个异步分页,内有使用说明
教学示范代码 ADO.NET分页封装[支持多表连接查询分页]-代码实现
可以来看看,asp.net分页封装源码结合存储过程
将Web层分页封装成通用模块,实现一次编写,N次使用
python中的分页封装
自己写的一个js分页控件.已经封装,可以直接使用. 适合各种用途的分页控制. 如果界面不够美观,只需要修改css即可.
分页封装源码结合存储过程
基于gin+vue搭建的后台管理系统框架,集成jwt鉴权,权限管理,动态路由,分页封装,多点登录拦截,资源权限,上传下载,代码生成器,表单生成器,通用工作流等基础功能,五分钟一套CURD前后端代码,目前已支持VUE3。...
HibernateUtil 分页 增删改查 封装 HibernateUtil 分页 增删改查 封装 HibernateUtil 分页 增删改查 封装
有感于制作网站时,常常要求有分页功能。为了避免写重复又不复杂的代码,特编写的这个关于sqlserver 的java代码封装
主要介绍了php封装的page分页类,结合完整实例形式分析了php数值运算与字符串操作实现分页功能的相关技巧,需要的朋友可以参考下。
PagerHelper<Ttype> 公具类 CommonPagination.ascx 只负责显示页码 个人感觉MVC 不怎么样..I don't bird it.
NULL 博文链接:https://lilang0603.iteye.com/blog/720400
NULL 博文链接:https://wangking717.iteye.com/blog/774953