`
liuxi1024
  • 浏览: 391069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基础巩固--Jsp Paging Demo

阅读更多

分页功能是在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
分享到:
评论

相关推荐

    【z-paging下拉刷新、上拉加载】示例demo

    在page中无需处理任何分页相关逻辑,无需在data中定义任何分页相关变量,全由z-paging内部处理。 【超灵活,支持各种类型自定义】支持自定义下拉刷新,自定义上拉加载更多,自带自定义下拉刷新效果,及其他数十种...

    uniapp基于z-paging实现页面下拉刷新、上拉加载,分页加载案例

    在本文中,我们将深入探讨如何使用uniapp与z-paging插件来实现页面的下拉刷新、上拉加载以及分页加载功能。...在实际开发过程中,你可能需要根据具体需求进行一些调整,但上述流程提供了一个基础的实现框架。

    ZK_DEMO-listbox-paging.zip_DEMO_ListBox java

    【标题】"ZK_DEMO-listbox-paging.zip_DEMO_ListBox Java" 是一个与Java相关的压缩包,其中包含了一个示例项目,演示了如何在Java应用程序中实现ListBox的分页功能。ZK是一个基于Java的富客户端用户界面框架,它使得...

    一个简单Paging自定义分页范例

    一个简单的Paging自定义分页范例 一个简单的Paging自定义分页范例 一个简单的Paging自定义分页范例 一个简单的Paging自定义分页范例 一个简单的Paging自定义分页范例 一个简单的Paging自定义分页范例

    前端项目-knockout-paging.zip

    压缩包中的 **knockout-paging-master** 文件夹很可能包含了以下内容: - **src**:源代码目录,可能有JavaScript文件(如`paging.js`),实现分页扩展器的核心逻辑。 - **demo** 或 **example**:示例代码,展示了...

    android-mvvm-paging-demo

    android-mvvm-paging-demo 使用Dagger2,Room,RxJava2,Databinding,FastAndroidNetworking,Fresco,Paging,Jetpack ...

    mybatis-paging-1.0.jar

    mybatis-paging-1.0.jar 是mybatis的一个分页插件的jar包,一直没有搜索到,今天好不容易找到了,跟大家分享

    paging_demo

    【标题】"paging_demo"是一个基于JSP和Servlet技术实现的分页示例项目,它展示了如何在Web应用中处理大量数据的分页显示。在Web开发中,尤其是在展示数据库中的大量记录时,分页是一种常见的优化用户体验的方法,...

    jquery-ui-tabs-paging:从 code.google.compjquery-ui-tabs-paging 自动导出

    jquery-ui-tabs-paging 从 code.google.com/p/jquery-ui-tabs-paging 自动导出 当标签不适合包含 UL 的宽度时,将显示“上一个”和“下一个”按钮以滚动标签。 特征 : 当窗口大小改变时自动调整大小。 下一个和...

    前端项目-jQuery-Paging.zip

    在这个"jQuery-Paging-master"目录中,我们可能找到以下文件和目录结构: - `js/`:存放分页插件的JavaScript源代码。 - `css/`:包含分页样式的CSS文件。 - `demo/`:提供示例代码和演示页面,帮助开发者理解如何...

    开源项目-ulule-paging.zip

    开源项目-ulule-paging是一个专为数据分页设计的库,它支持多种数据存储系统,如GORM。这个项目的目的是简化在开发过程中处理大量数据时的分页逻辑,提高应用程序的性能和用户体验。通过使用ulule-paging,开发者...

    jQuery-Paging动态分页数据获取插件.zip

    var pager = $('#paging-container').paging({ pageSize: 10, totalPages: 50 }); // 假设有个loadData函数从服务器获取数据 function loadData(pageIndex) { // AJAX请求获取第pageIndex页数据,然后填充到...

    jQuery-Paging动态分页数据获取插件

    首先,我们来了解一下jQuery的基础知识。jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互等任务。通过使用jQuery,开发者可以更高效地编写JavaScript代码,而无需关注浏览器...

    uni-z-paging:【uni-app自动分页器】超简单!仅需两步轻松完成完整分页逻辑(刷新,上拉加载更多),分页自动处理。支持自定义加载更多的文字或整个视图,自定义拖动刷新样式,自动管理空数据view等

    在DCloud插件市场中访问: ://ext.dcloud.net.cn/plugin?name=z-paging 反馈qq群(点击加群): 平台兼容性 应用程序 5天 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序 √ √ √ √ √ √ √ ...

    312_On-demand-paging_LLiss.pdf

    ### 按需分页(On-Demand Paging)在Linux Kernel中的实现与挑战 #### 标题解析 标题“312_On-demand-paging_LLiss.pdf”表明这是一份关于按需分页技术的报告或演讲文档,由Liran Liss在2017年的年度研讨会上提出。...

    spring-boot-jpa-rest-demo-filter-paging-sorting:具有过滤器,分页和排序功能的Spring Boot Data JPA

    春天启动jpa休息演示过滤器分页排序使用Spring引导MVC的示例应用程序Spring Data JPA能够执行过滤,分页和排序。过滤REST API按照演示应用程序中的说明处理过滤器。 它将以下概念解析并转换为org.springframework....

    Retrofit-MVVM-Paging

    在Android开发领域,Retrofit、MVVM架构以及Paging库是三个非常重要的概念,它们各自在构建高效、可维护的应用程序中发挥着关键作用。现在,让我们深入探讨这些技术及其在"Retrofit-MVVM-Paging"项目中的应用。 ...

    ext--grid--demo

    "ext--grid--demo"可能是一个示例项目,展示了如何在Ext JS环境中使用数据网格功能。 在Ext JS中,Grid是用于显示和操作表格数据的核心组件。它支持多种功能,如排序、分页、过滤、编辑等,使得数据管理变得简单。...

    Tugas-Bab-5-paging

    考虑到“Tugas-Bab-5-paging-main”这个文件名,这可能是一个主文件,负责接收请求、处理分页逻辑并渲染页面。在这样的文件中,可能会包含如下部分: 1. 数据库连接:建立与数据库的连接。 2. 计算总记录数:执行一...

    uniapp插件z-paging2.2.0

    【uniapp插件z-paging2.2.0】是一个专为uniapp框架设计的分页组件,旨在解决在移动应用开发中数据加载分页显示的问题。uniapp是一款基于Vue.js的多端开发框架,它允许开发者编写一次代码,就可以在iOS、Android、H5...

Global site tag (gtag.js) - Google Analytics