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  {
		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 page) {
			Listrows  = 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 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 getRows();	
		public abstract void setRows(List 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 {

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

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

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

}


二、service类

public UserPageDTO getUserPage(UserDTO dto) {
		Map map = new HashMap();
		map.put("username", dto.getUsername());
		map.put("password", dto.getPassword());
		RowBounds rowBounds = new RowBounds(dto.getPage(),dto.getPageSize());
		List list = userMapperDao.getUserPage(map, rowBounds);
		Pageable pageRequest = new PageRequest(dto.getPage(),dto.getPageSize());
		PageImpl pageImpl = new PageImpl(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 extends ActionSupport {

	private Logger log = Logger.getLogger(BaseAction.class);
	protected Page pageData;
	protected final int PAGE_SIZE = 2;
	protected int page = 0;
	protected String sortType;
	
	public Page 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  Page getPage(final PageDTO pageDTO, final Class clz) {
		if(pageDTO == null) {
			return new PageImpl(new ArrayList());
		}
		Page page = new DataPage(pageDTO, clz);
		return page;
	}
	class DataPage implements Page{

		private PageDTO pageDTO;
		private Class clz;
		private DataPage(PageDTO pageDTO, Class 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 iterator() {
			return getContent().iterator();
		}

		public List getContent() {
			List list = new ArrayList();
			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{

	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());
%>







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

<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>

3、显示的jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>    




login




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

id 用户名 密码
${obj.id} ${obj.username} ${obj.password}
<%@ include file="../common/pagination.jsp" %>


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





 


 

你可能感兴趣的:(action前台)