在页面中使用分页查询
来源:互联网 发布:英国研究生gpa算法 编辑:程序博客网 时间:2024/05/17 08:11
需要将数据进行分页显示。就叫分页。
分页需要考虑以下两点:
1.如何查询当前页的数据。
2.如何在jsp页面进行显示。
2两种分页的方式
2.1逻辑分页!
在sql查询时,从数据库将所有的数据检索出来,放在一个结果集中.
在程序中,通过逻辑语句获取对应的分页数据
List<Product> prodList = service.findAll(key)
例如:检查从11-20条:List<Product> list = prodList.subList(10,20)
该分页方式用在数据很少改变,比如:城市。
2.2.物理分页!!!
在sql查询时,从数据库中只检索当前页的数据。
通常不同的数据库有不同的物理分页语句。
mysql物理分页,采用的limit关键字。
oracle物理分页,采用的rownum关键词。
例如:
检索11-20条
mysql: select * from products where ... limit 10,10
oracle:
select * from (select rownum rm,id,name from products where ... and rownum<=20) tb
where tb.rm>10
补充:like模糊查询时,一般和"%"、"_",
“%”表示n个字符(n>=0)
"_"表示一个字符
页面逻辑
首页 上一页 下一页 尾页 跳转至 2
首页 上一页 1 2 3 4 5 下一页 尾页 跳转至 2
if(总页数<=5){
全部显示
}else{//>5
if(当前页<=3){
显示前五页的页码
6,7,8,9,10
}else if(当前页>=总页数-2){
显示后五页的页码
}else{
cp-2,cp-1,cp,cp+1,cp+2
显示从当前页码-2 到 当前页码+2
}
}
具体实现在jsp中
<c:set var="begin" value="0" scope="page"/><c:set var="end" value="0" scope="page"/> <c:if test="${page.countpage<=5 }"> <c:set var="begin" value="1" scope="page"/><c:set var="end" value="${page.countpage}" scope="page"/> </c:if> <c:if test="${page.countpage>5}"> <c:choose> <c:when test="${page.thispage<=3 }"> <c:set var="begin" value="1" scope="page"/> <c:set var="end" value="5" scope="page"/> </c:when> <c:when test="${page.thispage>=page.countpage-2 }"> <c:set var="begin" value="${page.countpage-4}" scope="page"/> <c:set var="end" value="${page.countpage}" scope="page"/> </c:when> <c:otherwise> <c:set var="begin" value="${page.thispage-2}" scope="page"/> <c:set var="end" value="${page.thispage+2}" scope="page"/> </c:otherwise> </c:choose> </c:if> <%--遍历页码 --%> <c:forEach begin="${begin}" end="${end}" step="1" var="i"> <c:if test="${page.thispage==i }">${i}</c:if> <c:if test="${page.thispage!=i }"> <a href="javascript:void(0)" onclick="changePageA(${i})">${i}</a> </c:if> </c:forEach><%-- 分页逻辑结束 --%><a href="javascript:void(0)" onclick="changePageA(${page.nextpage})">下一页</a><a href="javascript:void(0)" onclick="changePageA(${page.countpage})">尾页</a>跳转到<input type="text" value="${page.thispage }" onblur="changePage(this)"/>页</div>
在页面中进行查询时,经常会附带查询条件,而页面跳转的链接并不在表单域域中,所以在表单域中设置两个隐藏域:
<input type="hidden" name="thispage" id="tp" value="1"> <input type="hidden" name="rowperpage" id="rpp" value="${page.rowperpage}">提交表单的时候在js中进行:
function changePage(obj){ var tp = obj.value; var reg = /^[1-9][0-9]*$/; if(!reg.test(tp)){ alert("请您输入正确的页面"); obj.value = "${page.thispage}"; return; } //修改隐藏域thispage的值 document.getElementById("tp").value=tp; //提交searchForm表单 document.getElementById("searchForm").submit(); }表单进行的进行提交时,查询条件需要数据回显,但是如果商品的价格区间的类型设置为double,用户很有可能不去填满价格区间,这样double类型的默认值就会被设为0.0,这个0.0就会回显到输入框中,所以可以将商品的价格区间的类型设置为Double,这样默认值就是null,利用el表达式可以轻易输出数值。
分页处理逻辑:
public Page<Product> pageList(int thispage, int rowperpage, String name,String category, double min, double max) {Page<Product> page = new Page<Product>();//将查询条件设置page中page.setName(name);page.setCategory(category);if(min!=-1){page.setMin(min);}if(max!=Double.MAX_VALUE){page.setMax(max);}//将分析相关的数据设置page.setThispage(thispage);//设置当前第几页page.setRowperpage(rowperpage);//设置每页显示多少行page.setPrepage(thispage==1?1:thispage-1);//设置上一页//查询符合条件的总行数int countrow = prodDao.getProdCountByKey(name,category,min,max);//将总行数设置page中page.setCountrow(countrow);//计算总页数int countpage = countrow/rowperpage +(countrow%rowperpage==0?0:1);page.setCountpage(countpage);//设置下一页page.setNextpage(thispage==countpage?thispage:thispage+1);//设置当前页的商品集合page.setList(prodDao.findProdsByKeyLimit((thispage-1)*rowperpage,rowperpage,name,category,min,max));return page;}
- 在页面中使用分页查询
- 如何在JSP页面中不使用任何插件实现分页查询
- 在Struts2中,使用绑定select进行页面查询
- 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来,并具有动态排序、动态生成查询、自动分页功能
- 在java页面中实现分页效果
- 在oracle中实现分页查询sql
- 在oracle中实现搜索分页查询
- 在Oracle中实现搜索分页查询
- 在Oracle中实现搜索分页查询
- 在Oracle中实现搜索分页查询
- 在Oracle中实现搜索分页查询
- 分页条件查询页面
- 在yii中使用分页
- Hibernate中使用HQL进行分页查询
- adf 直接在JAVA中使用VO查询相关数据,并分页实现
- 在Spring Boot中使用Spring-data-jpa实现分页查询
- Hibernate 分页中,查询指定页面的数据
- 在页面中动态查询数据库信息
- Spring之DataSource配置
- HDU 5952 - Counting Cliques
- 欢迎使用CSDN-markdown编辑器
- Fragment 的懒加载
- 俞可平:党连一顿饭吃几个菜都管,可为什么还有人贪污?
- 在页面中使用分页查询
- NOIP提高组历年试题狂做
- C++多进程并发框架FFLIB
- Word2Vec
- 推送“送达率”概念太模糊?友盟带你解读“送达率”背后的那些指标
- 【Android - MD】之TextInputLayout的使用
- POJ-2503-Babelfish
- 常见的网页错误
- Java动态代理演变之路