效果图:

1.  添加公共类、方法、代码

1.    分页类:Page.java

package cn.com.aperfect.sso.base.dao;

import java.util.ArrayList;
import java.util.List;

public class Page<T> {
	// 当前页数
	private int currentPage;
	// 记录偏移量
	private int offset;
	// 总页数
	private int totalsPage;
	// 每页显示记录条数
	private int pageSize;
	// 总记录条数
	private int totalsCount;
	// 查询返回结果
	private List<T> result = new ArrayList<T>();
	// 分页链接
	private String uri;

	public Page(){}

	public Page(int currentPage, int pageSize) {
		this.currentPage = currentPage;
		this.pageSize = pageSize;
		this.offset = (currentPage-1)*pageSize;
	}

	public String getUri() {
		return uri;
	}

	public void setUri(String uri) {
		this.uri = uri;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) throws Exception {
		if (currentPage < 0) {
			currentPage = 0;
		}
		this.currentPage = currentPage;
	}

	public int getTotalsPage() {
		try {
			if (totalsCount % pageSize == 0) {
				totalsPage = totalsCount / pageSize;
			} else {
				totalsPage = (totalsCount / pageSize) + 1;
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return totalsPage;
	}

	public void setTotalsPage(int totalsPage) {
		if (totalsPage < 0) {
			totalsPage = 0;
		}
		this.totalsPage = totalsPage;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		if (pageSize <= 0) {
			pageSize = 20;
		}
		this.pageSize = pageSize;
	}

	public int getTotalsCount() {
		return totalsCount;
	}

	public void setTotalsCount(int totalsCount) {
		if (totalsCount < 0) {
			totalsCount = 0;
		}
		this.totalsCount = totalsCount;
	}

	public List<T> getResult() {
		return result;
	}

	public void setResult(List<T> result) {
		this.result = result;
	}

	public int getOffset() {
		return offset;
	}

	public void setOffset(int offset) {
		this.offset = offset;
	}
}

2. 公共的DAO / DAOImpl

DAO

	/**
	 * <b>function:</b> 传入查询语句和查询参数名key对应value,page指定currentPage和pageSize
	 * @param queryHql 查询语句
	 * @param paramMap 参数
	 * @param page 当前页和每页几条数据
	 * @throws Exception
	 */
	public Page<T> showPage(String queryHql,String countHql, Map<String, Object> paramMap,int currentPage, int pageSize) throws Exception;

IMPL

	public Page<T> showPage(String queryHql, String countHql, Map<String, Object> paramMap, int currentPage, int pageSize) throws Exception {
		Page<T> page = new Page<T>(currentPage, pageSize);
		try {
			int dataCount = queryForInt(countHql, paramMap);
			page.setResult(queryForList(queryHql, paramMap, page.getOffset(),pageSize));
			page.setTotalsCount(dataCount);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return page;
	}

	private final int queryForInt(String queryIntHQL,Map<String, Object> paramMap){
		Query query = this.getSession().createQuery(queryIntHQL);
		setQueryParameterValues(paramMap, query);
		int result = Integer.parseInt(query.uniqueResult().toString());
		return result;
	}

	private final List<T> queryForList(String queryHql,Map<String, Object> paramMap, int offset,int pageSize){
		Query query = this.getSession().createQuery(queryHql);
		setQueryParameterValues(paramMap, query);
		if (offset>=0) {
			query.setFirstResult(offset);
		}
		if (pageSize>0) {
			query.setMaxResults(pageSize);
		}

		return query.list();
	}

	private final void setQueryParameterValues(Map<String, Object> paramMap,Query query){
		if (CollectionUtil.isEmpty(paramMap))	return ;

		for (Entry<String, Object> entry : paramMap.entrySet()) {
			query.setParameter(entry.getKey(), entry.getValue());
		}

	}

2. 代码(Controller)

Controller分别有两个请求的方法,请求的地址是不一样的。

一个用于初始化页面时候请求,另外一个是分页时候Ajax用的请求。

(第一个请求返回的是整个页面,ajax请求返回的只是一个抽取出来的*table.jsp,所以要两个请求,只是返回的jsp不一样。只是使用了js将原来页面的table替换掉新的而已)

方法主体是一样的。

@Controller
@RequestMapping("/srmUser")
public class SrmUserController {

	@Resource
	private ISrmUserService srmUserService;

	private void doSearch(HttpServletRequest request, HttpServletResponse response) throws Exception{
		int currentPage = ServletRequestUtils.getIntParameter(request, "currentPage", 1);
		int pageSize = ServletRequestUtils.getIntParameter(request, "pageSize", 10);

		//前台数据传到后台查询
		String enterpriseName = ServletRequestUtils.getStringParameter(request, "enterpriseName");
		String vendorName = ServletRequestUtils.getStringParameter(request, "vendorName");
		String userName = ServletRequestUtils.getStringParameter(request, "userName");
		String status = ServletRequestUtils.getStringParameter(request, "status");

		String fromCreateDate = ServletRequestUtils.getStringParameter(request, "fromCreateDate");
		String toCreateDate = ServletRequestUtils.getStringParameter(request, "toCreateDate");

		Page<SrmUser> page = srmUserService.searchUserList(enterpriseName,vendorName,userName,status,fromCreateDate,toCreateDate, currentPage, pageSize);

		//数据返回前台
		request.setAttribute("enterpriseName", enterpriseName);
		request.setAttribute("vendorName", vendorName);
		request.setAttribute("userName", userName);
		request.setAttribute("status", status);
		request.setAttribute("fromCreateDate", fromCreateDate);
		request.setAttribute("toCreateDate", toCreateDate);
		request.setAttribute("toCreateDate", toCreateDate);

		request.setAttribute("userListDto", page.getResult());
		request.setAttribute("pageEntity", page);
	}

	@RequestMapping("/searchUser")
	public String searchUser(HttpServletRequest request, HttpServletResponse response) throws Exception {

		doSearch(request, response);

		return "/srm_management/srmUser_manage";
	}

	@RequestMapping("/ajaxSearchUser")
	public String ajaxSearchUser(HttpServletRequest request, HttpServletResponse response) throws Exception {

		doSearch(request, response);

		return "/srm_management/inc/srmUser_table";
	}

}

具体查询代码

	@Override
	public Page<SrmUser> getUserList(String enterpriseName, String vendorName,
			String userName, String status, String fromCreateDate,
			String toCreateDate, int currentPage, int pageSize) throws Exception {

		Page<SrmUser> page = null;
		StringBuffer sbHQL = new StringBuffer();
		StringBuffer countHQL = new StringBuffer();
		Map<String, Object> paramMap = new HashMap<String, Object>();
		try {
			sbHQL.append("from SrmUser u where 1=1 ");
			countHQL.append("select count(*) from SrmUser u where 1=1 "); 

			if (!StringUtil.isEmpty(enterpriseName)) {
				sbHQL.append(" and u.enterprise.enterpriseName like :enterpriseName ");
				countHQL.append(" and u.enterprise.enterpriseName like :enterpriseName ");
				paramMap.put("enterpriseName", "%"+enterpriseName+"%");
			}
			if (!StringUtil.isEmpty(vendorName)) {
				sbHQL.append(" and u.userId in (");
				sbHQL.append("select userId from SrmUserVendor s where s.vendorId in (");
				sbHQL.append("select vendorId from SrmVendor v where v.vendorName like :vendorName)) ");

				countHQL.append(" and u.userId in (");
				countHQL.append("select userId from SrmUserVendor s where s.vendorId in (");
				countHQL.append("select vendorId from SrmVendor v where v.vendorName like :vendorName)) ");

				paramMap.put("vendorName", "%"+vendorName+"%");
			}
			if (!StringUtil.isEmpty(userName)) {
				sbHQL.append(" and u.userName like :userName ");
				countHQL.append(" and u.userName like :userName ");
				paramMap.put("userName", "%"+userName+"%");
			}
			if (!StringUtil.isEmpty(status)) {
				sbHQL.append(" and u.status = :status ");
				countHQL.append(" and u.status = :status ");
				paramMap.put("status", Integer.parseInt(status));
			}
			if (!StringUtil.isEmpty(fromCreateDate)) {
				sbHQL.append(" and u.createDate >= :fromCreateDate ");
				countHQL.append(" and u.createDate >= :fromCreateDate ");
				paramMap.put("fromCreateDate", fromCreateDate);
			}
			if (!StringUtil.isEmpty(toCreateDate)) {
				sbHQL.append(" and u.createDate < :toCreateDate ");
				countHQL.append(" and u.createDate < :toCreateDate ");
				//toCreateDate 要加上一天
				java.util.Date date = new SimpleDateFormat("yyyy-MM-dd").parse(toCreateDate);
				Calendar calendar = new GregorianCalendar();
			    calendar.setTime(date);
			    calendar.add(Calendar.DATE,1);
			    date= calendar.getTime();
				paramMap.put("toCreateDate", date);
			}

			sbHQL.append(" order by u.userId asc ");
			page = showPage(sbHQL.toString(), countHQL.toString(), paramMap, currentPage, pageSize);

3.   前台JSP等

Jsp要分成两部分,一部分是整体的第一次请求的时候的整体页面。

另一部分是*_table.jsp 就是要分页的那个table。

只要在整体里面抽出*_table.jsp页面就可以,然后整体页面里面引用*_table.jsp页面。

将要ajax请求的table替换成下面,这个<span>是用于后面Ajax请求成功的时候要替换的标识

  					<span id="resourceSpan">
	  					<jsp:include page="inc/srmUser_table.jsp" />
  					</span>

后台将整个*_table.jsp 页面返回到前台的<span>里面。

*.table.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<table class="details">
	<tr class="noticClsSrm">
		<td>企业</td>
		<td>用户名</td>
		<td>创建者</td>
		<td>创建时间</td>
		<!-- <td>最后编辑者</td>
		<td>最后更新时间</td> -->
		<td>状态</td>
	</tr>
	<c:forEach var="userDto" items="${requestScope.userListDto}">
	<tr>
		<td>${userDto.enterprise.enterpriseName }</td>
		<td>${userDto.userName }</td>
		<td>${userDto.creatorName }</td>
		<td>
			<fmt:formatDate value="${userDto.createDate }" pattern="yyyy-MM-dd"/>
		</td>
		<%-- <td>${userDto.editorName }</td>
		<td>
			<fmt:formatDate value="${userDto.updateDate }" pattern="yyyy-MM-dd"/>
		</td> --%>
		<td>
		<c:if test="${userDto.status==0 }">启动</c:if>
		<c:if test="${userDto.status==1 }">冻结</c:if>
		<c:if test="${userDto.status==2 }">删除</c:if>
		</td>
	</tr>
	</c:forEach>
</table>
<jsp:include page="../../commons/page_ajax.jsp"/>
<script type="text/javascript">
	//分页跳转
	var totalsPage = '${pageEntity.totalsPage}';
	if (totalsPage == '') totalsPage = 1;
	function ajaxGotoPage(currentPage) {
		if (currentPage == null || currentPage == "") return;
		if (isNaN(currentPage)) return;

		if (currentPage < 1) currentPage = 1;
		else if ((currentPage > totalsPage) || (currentPage==${pageEntity.currentPage})) return;

		var resourceSpan = $("#resourceSpan");
		resourceSpan.html("<br/><img src='${pageContext.request.contextPath }/commons/images/blue-loading.gif'/>");
		$.ajax({
			url:'${pageContext.request.contextPath }/v/srmUser/ajaxSearchUser',
			type:'post',
			data:{
				currentPage:currentPage,
				enterpriseName:$("#enterpriseName").val(),
				vendorName:$("#vendorName").val(),
				userName:$("#userName").val(),
				status:$("#status").val(),
				fromCreateDate:$("#fromCreateDate").val(),
				toCreateDate:$("#toCreateDate").val()
			},
			dataType:'text',
			timeout:60000,
			error: function(e) {
				alert(e);
			},
			success: function(result){
				resourceSpan.html(result);
			}
		});
	}
	function gotoPageByInput(){
		var currentPage=document.getElementById('goInput').value;
		ajaxGotoPage(parseInt(currentPage));
	}
</script>

page_ajax.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<style>
<span style="white-space:pre">	</span>.goSearchButton{background:url(<c:url value='/resources/images/ok.gif' />);border:0 none;height:19px;margin:0 0 0 5px;text-indent:-999px;width:37px;}
<span style="white-space:pre">	</span>div.yk-pager {text-align: right;padding:3px 0px;margin: 3px 0px;color:#666666;}
<span style="white-space:pre">	</span>div.yk-pager a{color: #036CB4;margin-right: 2px;padding:2px 5px;text-decoration: none;border:1px solid #929196;}
<span style="white-space:pre">	</span>div.yk-pager a:hover {padding:2px 5px;margin-right: 2px;background-color:#ccdaf3;border: #a0a0a0 1px solid;}
<span style="white-space:pre">	</span>div.yk-pager a:active {padding:2px 5px;margin-right: 2px;background-color:#ccdaf3;border: #a0a0a0 1px solid;}
<span style="white-space:pre">	</span>div.yk-pager span.current {font-weight: bold;color: #FFFFFF;padding:2px 5px;margin-right: 2px;background-color:#6390cb;border:1px solid #3d68a0}
<span style="white-space:pre">	</span>div.yk-pager span.disabled {color: #ccc;margin-right: 2px;border:1px solid #f3f3f3;padding:2px 5px;}
<span style="white-space:pre">	</span>div.yk-pager .goInput{border:1px solid #99bbe8;color:#000000;font-family:Tahoma,SimSun,Arial;height:18px;margin:0 5px;text-align:center;vertical-align:top;width:30px;}
<span style="white-space:pre">	</span>div.yk-pager .goButton{background:url(skin/ok.gif);border:0 none;height:19px;margin:0 0 0 5px;text-indent:-999px;width:37px;}
</style>
<div class="yk-pager">
				<a href="javascript:ajaxGotoPage(1);">首页</a>
				<a href="javascript:ajaxGotoPage(${pageEntity.currentPage-1});"> ◄上一页</a>
				<a href="javascript:ajaxGotoPage(${pageEntity.currentPage+1});"> 下一页► </a>
				<a href="javascript:ajaxGotoPage(${pageEntity.totalsPage });"> 末页</a>
			总${pageEntity.totalsCount }条,第${pageEntity.currentPage}/${pageEntity.totalsPage }页,到第<input size=2 id="goInput" value=''/>页,
					<input type="button" class="goButton" onclick="gotoPageByInput();"/>
</div>

ok.gif

Ajax分页 Spring MVC + Hibernate的更多相关文章

  1. IntelliJ IDEA:Getting Started with Spring MVC, Hibernate and JSON实践

    原文:IntelliJ IDEA:Getting Started with Spring MVC, Hibernate and JSON实践 最近把编辑器换成IntelliJ IDEA,主要是Ecli ...

  2. Spring + Spring MVC + Hibernate

    Spring + Spring MVC + Hibernate项目开发集成(注解) Posted on 2015-05-09 11:58 沐浴未来的我和你 阅读(307) 评论(0) 编辑 收藏 在自 ...

  3. IntelliJIDEA Getting+Started+with+Spring+MVC,+Hibernate+and+JSON

    https://confluence.jetbrains.com/display/IntelliJIDEA/Getting+Started+with+Spring+MVC,+Hibernate+and ...

  4. Spring + Spring MVC + Hibernate项目开发集成(注解)

    在自己从事的项目中都是使用xml配置的方式来进行的,随着项目的越来越大,会发现配置文件会相当的庞大,这个不利于项目的进行和后期的维护.于是考虑使用注解的方式来进行项目的开发,前些日子就抽空学习了一下. ...

  5. Java 本地开发环境搭建(框架采用 Spring+Spring MVC+Hibernate+Jsp+Gradle+tomcat+mysql5.6)

    项目搭建采用技术栈为:Spring+Spring MVC+Hibernate+Jsp+Gradle+tomcat+mysql5.6 搭建环境文档目录结构说明: 使用Intellj Idea 搭建项目过 ...

  6. spring mvc: Hibernate验证器(字段不能为空,在1-150自己)

    spring mvc: Hibernate验证器(字段不能为空,在1-150自己) 准备: 下载Hibernate Validator库 - Hibernate Validator.解压缩hibern ...

  7. Spring MVC第一课:用IDEA构建一个基于Spring MVC, Hibernate, My SQL的Maven项目

    作为一个Spring MVC新手最基本的功夫就是学会如何使用开发工具创建一个完整的Spring MVC项目,本文站在一个新手的角度讲述如何一步一步创建一个基于Spring MVC, Hibernate ...

  8. Spring MVC Hibernate MySQL Integration(集成) CRUD Example Tutorial【摘】

    Spring MVC Hibernate MySQL Integration(集成) CRUD Example Tutorial We learned how to integrate Spring ...

  9. Spring mvc+hibernate+freemarker(实战)

    Spring mvc+hibernate+freemarker(实战) 博客分类: Spring Spring mvchibernatefreemarkerwebjava  今天我为大家做了一个 sp ...

随机推荐

  1. Template Method 模板设计模式

    什么是模板设计模式 对于不了解的模板设计模式的来说,可以认为如同古代的造纸术一样,纸所以成型,取决于用了模板的形状,形状又由镂空的木板组成,而你想要造什么纸,又取决于你使用什么材料. 上面提到了两个关 ...

  2. acm几何

    fzu 2231,N个点求构成的平行四边行个数. 题意简重点在优化上 #include <cstdio> #include <iostream> #include <cs ...

  3. Spring错误之org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'bookService' is expected to be of type 'pw.fengya.tx.BookService' but was actually of type 'com.sun.proxy.$Proxy1

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cas ...

  4. Node.js Net 模块

    Node.js Net 模块提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法,我们可以通过以下方式引入该模块: var net = require("net") ...

  5. sql server 的osql 使用例子

    一次性执行一个语句并输出到文件: osql -Usa -dSCGWYDJ2012 -P -S192.168.56.1 -Q "exit( SELECT top 1 * FROM A08)&q ...

  6. COS对象存储服务的使用

    ---------------------------------------------------------------------------------------------[版权申明:本 ...

  7. Apache Curator入门实战

    Apache Curator入门实战 Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeep ...

  8. 如何扩展/删除swap分区

    背景:         由于安装Oracle 的时候,swap太小只划分了4G,后期发现交换分区太小,不满足使用,于是进行了swap分区的扩容过程: swap分区的扩展很简单,但是需要root用户权限 ...

  9. Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系

    Agenda: getSystemService(Context.CAMERA_SERVICE) CameraManager.getCameraIdList() ICameraService.aidl ...

  10. eval和列表解析的一处陷阱

    >>> def f(): a=1 return [i+a for i in range(3)] >>> f() [1, 2, 3] >>> def ...