一、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 extends Object> 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 extends Object> 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 extends Object> pageDTO, final Class extends M> clz) {
if(pageDTO == null) {
return new PageImpl(new ArrayList());
}
Page page = new DataPage(pageDTO, clz);
return page;
}
class DataPage implements Page{
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 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"%>
over 请结合我的另一博文看:Mysql+Mybatis+spring 后台分页 ,http://blog.csdn.net/ppt0501/article/details/13502581