分页功能是在mysql+spring+jsp 下demo
1、效果图
2、DAO查询
public Paging getAllCustomer(int pageNumber, int pageSize) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("start", pageNumber);
map.put("limit", pageSize);
Paging paging = new Paging();
String sql = "select * from customer";
String countSql = SqlUtils.buildCountQuery(sql);
paging.setTotalCount(template.queryForInt(countSql, map));
String querySql = SqlUtils.buildLimitedQuery(sql);
paging.setCollections(template.query(querySql, ParameterizedBeanPropertyRowMapper.newInstance(Customer.class),map));
return paging;
}
public class SqlUtils {
// static final String DEFAULT_DATABASE = "hsql";
static final String DEFAULT_DATABASE = "mysql";
public static String buildLimitedQuery(String sql) {
if ("hsql".equals(DEFAULT_DATABASE)) {
return buildHsqldbLimitedQuery(sql, true);
} else if ("mysql".equals(DEFAULT_DATABASE)) {
return buildMysqlLimitedQuery(sql, true);
}
return "";
}
public static String buildHsqldbLimitedQuery(String sql, boolean hasOffset) {
return new StringBuffer(sql.length() + 10).append(sql).insert(
sql.toLowerCase().indexOf("select") + 6,
hasOffset ? " limit :start :limit" : " top :limit").toString();
}
public static String buildMysqlLimitedQuery(String sql, boolean hasOffset) {
return new StringBuffer(sql.length() + 20).append(sql).append(
hasOffset ? " limit :start, :limit" : " limit :limit")
.toString();
}
public static String buildCountQuery(String sql) {
return "select count(*) from (" + sql + ") cnt_sub";
}
}
public class Paging {
private int totalCount;
private Collection<?> collections;
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public Collection<?> getCollections() {
return collections;
}
public void setCollections(Collection<?> collections) {
this.collections = collections;
}
}
3、spring action
@RequestMapping("/customer/list.do")
public String list(String pageNumberStr, Model model) {
int pageNumber = 1;
if (pageNumberStr != null && !pageNumberStr.isEmpty()) {
pageNumber = Integer.parseInt(pageNumberStr);
}
int pageSize = 5; //分页大小
Paging paging = customerManager.getAllCustomer((pageNumber - 1) * pageSize, pageSize);
int totalPosts = paging.getTotalCount();//总笔数
int totalPages = totalPosts / pageSize + ((totalPosts % pageSize) > 0 ? 1 : 0);//总页数
model.addAttribute("pageSize", pageSize);
model.addAttribute("totalPosts", totalPosts);
model.addAttribute("pageNumber", pageNumber);//页码
model.addAttribute("totalPages", totalPages);
model.addAttribute("results", paging.getCollections());
return "customer/list";
}
4、list.jsp
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
//第一页
function first_page(formName) {
if(formName){
var page = parseInt(formName.pageNumberStr.value);
if(page > 1) {
formName.pageNumberStr.value = 1;
formName.submit();
}
}
}
//上一页
function prev_page(formName) {
var page = parseInt(formName.pageNumberStr.value);
if(page > 1) {
formName.pageNumberStr.value = page - 1;
formName.submit();
}
}
//下一页
function next_page(formName) {
var page = parseInt(formName.pageNumberStr.value);
var pages = parseInt(formName.totalPages.value);
if(page < pages) {
formName.pageNumberStr.value = page + 1;
formName.submit();
}
}
//末页
function last_page(formName) {
var page = parseInt(formName.pageNumberStr.value);
var pages = parseInt(formName.totalPages.value);
alert('page:'+ page +':pages'+ pages);
if(page < pages) {
formName.pageNumberStr.value = formName.totalPages.value;
formName.submit();
}
}
//选择某一页
function gotoSelectedPage(formName,_pageNumber)
{
alert(_pageNumber);
formName.pageNumberStr.value=_pageNumber;
formName.submit();
}
</script>
<% String rootPath = request.getContextPath(); %>
<h1>Paging Demo</h1>
<hr />
<table>
<thead>
<tr align="center">
<td width="10%">id</td>
<td width="70%">no</td>
<td colspan="3">name</td>
</tr>
</thead>
<tbody>
<c:forEach items="${results}" var="customer">
<tr align="center">
<td>${customer.id}</td>
<td>${customer.customerNo}</td>
<td>${customer.customerName}</td>
</tr>
</c:forEach>
</tbody>
<tfoot>
<tr align="center">
<td colspan="5">
<form action="<%=rootPath %>/customer/list.do" method="get" id="navigatorForm">
<input type="hidden" name="pageNumberStr" id="pageNumberStr" value="${pageNumber}"/>
<input type="hidden" name="totalPages" id="totalPages" value="${totalPages}"/>
总共${totalPosts}条记录${totalPages}页,当前第${pageNumber}页
<a href="javascript:first_page(document.getElementById('navigatorForm'))">第一页</a>
<c:if test="${pageNumber>1}">
<a href="javascript:prev_page(document.getElementById('navigatorForm'))">上一页</a>
</c:if>
跳转到第 <select name="_pageNumber" id="_pageNumber" onchange="gotoSelectedPage(document.getElementById('navigatorForm'),this.value);">
<c:forEach begin="1" end="${totalPages}" step="1" var="pageIndex">
<c:choose>
<c:when test="${pageIndex eq pageNumber}">
<option value="${pageIndex}" selected="selected">${pageIndex}</option>
</c:when>
<c:otherwise>
<option value="${pageIndex}">${pageIndex}</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
页
<c:if test="${pageNumber<totalPages}">
<a href="javascript:next_page(document.getElementById('navigatorForm'))">下一页</a>
</c:if>
<a href="javascript:last_page(document.getElementById('navigatorForm'))">末页</a>
</form>
</td>
</tr>
</tfoot>
</table>
<hr/>
</body>
</html>
- 大小: 10.5 KB
分享到:
相关推荐
在page中无需处理任何分页相关逻辑,无需在data中定义任何分页相关变量,全由z-paging内部处理。 【超灵活,支持各种类型自定义】支持自定义下拉刷新,自定义上拉加载更多,自带自定义下拉刷新效果,及其他数十种...
非常好用的一个,java反编译工具哦,实用,方便,好极了
一个简单的Paging自定义分页范例 一个简单的Paging自定义分页范例 一个简单的Paging自定义分页范例 一个简单的Paging自定义分页范例 一个简单的Paging自定义分页范例 一个简单的Paging自定义分页范例
前端项目-jQuery-Paging,可能是最先进的jquery分页插件。
前端项目-knockout-paging,向淘汰添加扩展器,向可观察数组添加分页功能。
android-mvvm-paging-demo 使用Dagger2,Room,RxJava2,Databinding,FastAndroidNetworking,Fresco,Paging,Jetpack ...
mybatis-paging-1.0.jar 是mybatis的一个分页插件的jar包,一直没有搜索到,今天好不容易找到了,跟大家分享
jquery-ui-tabs-paging 从 code.google.com/p/jquery-ui-tabs-paging 自动导出 当标签不适合包含 UL 的宽度时,将显示“上一个”和“下一个”按钮以滚动标签。 特征 : 当窗口大小改变时自动调整大小。 下一个和...
312_On-demand-paging_LLiss.pdf
开源项目-ulule-paging.zip,Paginate your data using multiple datastore (gorm, etc.)
在DCloud插件市场中访问: ://ext.dcloud.net.cn/plugin?name=z-paging 反馈qq群(点击加群): 平台兼容性 应用程序 5天 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序 √ √ √ √ √ √ √ ...
jsp+servlet分页
春天启动jpa休息演示过滤器分页排序使用Spring引导MVC的示例应用程序Spring Data JPA能够执行过滤,分页和排序。过滤REST API按照演示应用程序中的说明处理过滤器。 它将以下概念解析并转换为org.springframework....
jQuery-Paging动态分页数据获取插件是一款动态数据获取并分页代码,分页切换时还带有好看的弹性动画效果。
操作系统第九章作业Paging-multilevel-translate,多级页表
实现分页排序和过滤本系列React Materil UI中的完整视频: ://bit.ly/3k2tUSD取得验证码$ git clone https://github.com/CodAffection/React-Material-UI-Table-Paging-Sorting-and-Filtering..git这个怎么运作 ?...
uniapp基于z-paging实现页面下拉刷新、上拉加载,分页加载案例 仅可供学习研究
jar包,maven中已经无法找到。下面曾经的引用: <groupId>org.noo <artifactId>mybatis-paging <version>0.1 </dependency>
用于mybatis分页的jar包,封装了一些常用的分页组件
SAP Note 1557506 - Linux paging improvements