spring-data 前台分页

一、DTO定义

1、定义基础DTO(BasePageDTO),包含分页相关信息:

package com.ppt.dto;

import javax.xml.bind.annotation.XmlTransient;

public class BasePageDTO {

	@XmlTransient
	protected Integer totalRecord;//总的记录数
	protected Integer page = 1;//页码
	protected Integer pageSize;//一页的大小
	
	public Integer getPage() {
		if(page == null || page < 0) {
			page = 0;
		}
		return page;
	}

	public void setPage(Integer page) {
		this.page = page;
	}

	public Integer getPageSize() {
		return pageSize;
	}

	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}

	public Integer getTotalRecord() {
		return totalRecord;
	}

	public void setTotalRecord(Integer totalRecord) {
		this.totalRecord = totalRecord;
	}
}

2、定义普通DTO(UserDTO)继承BasePageDTO,可以去得当前页和页记录大小信息

package com.ppt.dto;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="user")
public class UserDTO extends BasePageDTO{

	private int id;
	private String username;
	private String password;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "UserDTO [id=" + id + ", username=" + username + ", password="
				+ password + "]";
	}
	
}


3、定义抽象泛型基础DTO(PageDTO),定义更丰富的分页相关信息

package com.ppt.dto;

import java.util.List;

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

import org.springframework.data.domain.Page;
import org.springside.modules.mapper.BeanMapper;

import com.google.common.collect.Lists;

@XmlRootElement
public abstract class PageDTO<T>  {
		private int number;
		private int size;
		private int totalPages;
		private int numberOfElements;
		private long totalElements;
		private boolean hasPreviousPage;
		private boolean isFirstPage;
		private boolean hasNextPage;
		private boolean isLastPage;
		private boolean hasContent;
		
		public PageDTO(){};
		public PageDTO(Page<? extends Object> page) {
			List<T>rows  = Lists.newArrayList();
			if(page != null)
			for(Object k: page.getContent()) {			
				rows.add(BeanMapper.map(k,  getDesClz()));
			}
			this.setRows(rows);
			this.number = page.getNumber();
			this.size = page.getSize();
			this.totalPages = page.getTotalPages();
			this.numberOfElements = page.getNumberOfElements();
			this.totalElements = page.getTotalElements();
			this.hasPreviousPage = page.hasPreviousPage();
			this.isFirstPage = page.isFirstPage();
			this.hasNextPage = page.hasNextPage();
			this.isLastPage = page.isLastPage();
			this.hasContent = page.hasContent();
		}
		@XmlTransient
		public abstract Class<T> getDesClz();
		public int getNumber() {
			return number;
		}

		public void setNumber(int number) {
			this.number = number;
		}

		public int getSize() {
			return size;
		}

		public void setSize(int size) {
			this.size = size;
		}

		public int getTotalPages() {
			return totalPages;
		}

		public void setTotalPages(int totalPages) {
			this.totalPages = totalPages;
		}

		public int getNumberOfElements() {
			return numberOfElements;
		}

		public void setNumberOfElements(int numberOfElements) {
			this.numberOfElements = numberOfElements;
		}

		public long getTotalElements() {
			return totalElements;
		}

		public void setTotalElements(long totalElements) {
			this.totalElements = totalElements;
		}

		public boolean getHasPreviousPage() {
			return hasPreviousPage;
		}

		public void setHasPreviousPage(boolean hasPreviousPage) {
			this.hasPreviousPage = hasPreviousPage;
		}

		public boolean getIsFirstPage() {
			return isFirstPage;
		}

		public void setIsFirstPage(boolean isFirstPage) {
			this.isFirstPage = isFirstPage;
		}

		public boolean getHasNextPage() {
			return hasNextPage;
		}

		public void setHasNextPage(boolean hasNextPage) {
			this.hasNextPage = hasNextPage;
		}

		public boolean getIsLastPage() {
			return isLastPage;
		}

		public void setIsLastPage(boolean isLastPage) {
			this.isLastPage = isLastPage;
		}
		@XmlTransient
		public abstract List<T> getRows();	
		public abstract void setRows(List<T> rows);

		public boolean getHasContent() {
			return hasContent;
		}

		public void setHasContent(boolean hasContent) {
			this.hasContent = hasContent;
		}
}


4、定义分页返回DTO(UserPageDTO),具体到某个类的DTO

package com.ppt.dto;

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

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

import org.springframework.data.domain.Page;
@XmlRootElement(name="Page")
public class UserPageDTO extends PageDTO<UserDTO> {

 private List<UserDTO> rows;
 
 public UserPageDTO() {}
 
 public UserPageDTO(Page<? extends Object> pageable) {
  super(pageable);
 }
 
 @Override
 @XmlTransient
 public Class<UserDTO> getDesClz() {
  return UserDTO.class;
 }

 @Override
 @XmlElementWrapper(name = "Users")
 @XmlElement(name="user")
 public List<UserDTO> getRows() {
  if(rows == null) {
   rows = new ArrayList<UserDTO>();
  }
  return rows;
 }

 @Override
 public void setRows(List<UserDTO> rows) {
  this.rows = rows;
 }

}


二、service类

public UserPageDTO getUserPage(UserDTO dto) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("username", dto.getUsername());
		map.put("password", dto.getPassword());
		RowBounds rowBounds = new RowBounds(dto.getPage(),dto.getPageSize());
		List<UserDTO> list = userMapperDao.getUserPage(map, rowBounds);
		Pageable pageRequest = new PageRequest(dto.getPage(),dto.getPageSize());
		PageImpl<UserDTO> pageImpl = new PageImpl<UserDTO>(list,pageRequest,list.get(0).getTotalRecord());
		UserPageDTO page = new UserPageDTO(pageImpl);
		return page;
	}

三、继承action类(BaseAction)

1、继承action

package com.ppt.action;

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

import org.apache.log4j.Logger;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Sort;
import org.springside.modules.mapper.BeanMapper;

import com.opensymphony.xwork2.ActionSupport;
import com.ppt.dto.PageDTO;

@SuppressWarnings("serial")
public class BaseAction<T> extends ActionSupport {

	private Logger log = Logger.getLogger(BaseAction.class);
	protected Page<T> pageData;
	protected final int PAGE_SIZE = 2;
	protected int page = 0;
	protected String sortType;
	
	public Page<T> getDataPage() {
		return pageData;
	}

	public String getSortType() {
		return sortType;
	}

	public void setSortType(String sortType) {
		this.sortType = sortType;
	}

	public int getPage() {
		return page;
	}

	public void setPage(String page) {
		if(page == null || "".equals(page.trim())) {
			page = "1";
		}
		this.page = Integer.parseInt(page);
	}
	
	protected <M> Page<M> getPage(final PageDTO<? extends Object> pageDTO, final Class<? extends M> clz) {
		if(pageDTO == null) {
			return new PageImpl<M>(new ArrayList<M>());
		}
		Page<M> page = new DataPage<M>(pageDTO, clz);
		return page;
	}
	class DataPage<M> implements Page<M>{

		private PageDTO<? extends Object> pageDTO;
		private Class<? extends M> clz;
		private DataPage(PageDTO<? extends Object> pageDTO, Class<? extends M> clz) {
			this.pageDTO = pageDTO;
			this.clz = clz;
		}
		
		public int getNumber() {
			return pageDTO.getNumber();
		}

		public int getSize() {
			return pageDTO.getSize();
		}

		public int getTotalPages() {
			return pageDTO.getTotalPages();
		}

		public int getNumberOfElements() {
			return pageDTO.getNumberOfElements();
		}

		public long getTotalElements() {
			return pageDTO.getTotalElements();
		}

		public boolean hasPreviousPage() {
			return pageDTO.getHasPreviousPage();
		}

		public boolean isFirstPage() {
			return pageDTO.getIsFirstPage();
		}

		public boolean hasNextPage() {
			return pageDTO.getHasNextPage();
		}

		public boolean isLastPage() {
			return pageDTO.getIsLastPage();
		}

		public Iterator<M> iterator() {
			return getContent().iterator();
		}

		public List<M> getContent() {
			List<M> list = new ArrayList<M>();
			for(Object obj : pageDTO.getRows()) {
				list.add(BeanMapper.map(obj, clz));
			}
			return list;
		}

		public boolean hasContent() {
			return pageDTO.getHasContent();
		}

		public Sort getSort() {
			return null;
		}
		
	}
}


2、具体的action类,继承基础BaseAction类

package com.ppt.action.user;

import java.util.Date;

import jxl.common.Logger;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;

import com.ppt.action.BaseAction;
import com.ppt.dto.UserDTO;
import com.ppt.dto.UserPageDTO;
import com.ppt.service.UserService;

@SuppressWarnings("serial")
@Namespace("/user")
public class UserAction extends BaseAction<UserDTO>{

	private Logger log = Logger.getLogger(UserAction.class);
	@Autowired
	private UserService userService;
	
	private String username;
	private String password;
		
	@Action(value="doLogin", results={@Result(name="success", location="userList.jsp")})
	public String getUserList() {
		log.info("getUserList");
		try {
			UserDTO dto = new UserDTO();
			dto.setPage(this.getPage());
			dto.setPageSize(PAGE_SIZE);
			UserPageDTO page = userService.getUserPage(dto);
			pageData = getPage(page, UserDTO.class);
			log.info("success");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "success";
	}
	
	@Action(value="logout", results={@Result(name="success", location="login.jsp")})
	public String logout() {
		log.info("退出登录:" + new Date().toString());
		return "success";
	}
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
}

四、页面分页代码:

1、tag标签(pagination.tag)

<%@tag pageEncoding="UTF-8"%>
<%@ attribute name="dataPage" type="org.springframework.data.domain.Page" required="true"%>
<%@ attribute name="paginationSize" type="java.lang.Integer" required="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
int current =  dataPage.getNumber() + 1;
int begin = Math.max(1, current - paginationSize/2);
int end = Math.min(begin + (paginationSize - 1), dataPage.getTotalPages());
long totalCount = dataPage.getTotalElements();
request.setAttribute("totalCount", totalCount);
request.setAttribute("current", current);
request.setAttribute("begin", begin);
request.setAttribute("end", end);
request.setAttribute("total", dataPage.getTotalPages());
%>

<div class="pagination">
	<ul>
		<% if(dataPage.hasPreviousPage()) {%>
			<li><a href="#" οnclick="getPage(1)">首页</a></li>
			<li><a href="#" οnclick="getPage(${current-1})">上一页</a></li>
		<%} else { %>
			<li class="disabled"><a href="#">首页</a></li>
			<li class="disabled"><a href="#">上一页</a></li>
		<%} %>
		<c:forEach var="i" begin="${begin}" end="${end}">
            <c:choose>
                <c:when test="${i == current}">
                    <li class="active"><a href="#">${i}</a></li>
                </c:when>
                <c:otherwise>
                    <li><a href="#" οnclick="getPage(${i})">${i}</a></li>
                </c:otherwise>
            </c:choose>
        </c:forEach>
	  
	  	 <% if (dataPage.hasNextPage()){%>
               	<li><a href="#" οnclick="getPage(${current+1})">下一页</a></li>
                <li><a href="#" οnclick="getPage(${total})">尾页</a></li>
         <%} else {%>
                <li class="disabled"><a href="#">下一页</a></li>
                <li class="disabled"><a href="#">尾页</a></li>
         <%} %>
               <li style="line-height:28px;">  共  ${totalCount} 条记录</li>
	</ul>
</div>
<html>
<head>
<script type="text/javascript">
	function getPage(v){
		var page = parseInt(v) - 1;
	    document.getElementById("page").value=page;
		document.getElementById("queryForm").submit();
	}
</script>
</head>
</html>

2、分页代码:(pagination.jsp)

<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<center>
	<tags:pagination dataPage="${dataPage}" paginationSize="9"/> 
</center>

3、显示的jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>    
<!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=utf-8">
<title>login</title>
<style type="text/css">
.tr{background:url(bg1.gif) #5A86D6;height:25px;text-align:center; font-weight:bold;}
.td{background:#F7F7FF;text-align:center;}
.td1{background:#F7F7FF;text-align:left;}
.td2{background:#F7F7FF;text-align:right;}
</style>
</head>
<body>

<%@include file="../common/leftMenu.jsp"%>

<form action="../user/doLogin.action" method="post" id="queryForm">
<input type="hidden" id="page" name="page" />
<table width="100%"  border="0" cellpadding="3" cellspacing="1" bgcolor="#E2E2E2">
  <thead>
   <tr>
    <th class="td">id</th>
    <th class="td">用户名</th>
    <th class="td">密码</th>
   </tr>
  </thead>
  <tbody>
  <s:iterator value="dataPage.content" id="obj">
   <tr>
    <td class="td">${obj.id}</td>
    <td class="td">${obj.username}</td>
    <td class="td">${obj.password}</td>
   </tr>
  </s:iterator>
  </tbody>
</table>
<%@ include file="../common/pagination.jsp" %>
</form>
</body>
</html>


over 请结合我的另一博文看:Mysql+Mybatis+spring 后台分页 http://blog.csdn.net/ppt0501/article/details/13502581





 


 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值