您的位置:首页 > 编程语言 > Java开发

java三大框架实现仿京东分页效果

2015-07-10 11:45 423 查看
ssh实现分页很简单,效果如图:,



下面是分页源代码:直接拷贝到项目中即可使用:

在页面中的一个超链接进入分页页面:<a href="page_getPersonForPage.action?page=1">进入分页</a>

1、首先定义了一个PageBean.java用来存放分页相关的变量,总记录数,当前页,是否为第一页,是否为最后一页,计算总页数等变量,

/**

* author:lez

*/

package com.testssh.entity;

import java.util.List;

/**

* @author LEZ

*2015年6月12日

*/

public class PageBean {

private List list; //要返回的某一页的记录列表

private int allRow; //总记录数

private int totalPage; //总页数

private int currentPage; //当前页

private int pageSize; //每页记录数

private boolean isFirstPage; //是否为第一页

private boolean isLastPage; //是否为最后一页

private boolean hasPreviousPage; //是否有前一页

private boolean hasNextPage; //是否有下一页

public List getList() {

return list;

}

public void setList(List list) {

this.list = list;

}

public int getAllRow() {

return allRow;

}

public void setAllRow(int allRow) {

this.allRow = allRow;

}

public int getTotalPage() {

return totalPage;

}

public void setTotalPage(int totalPage) {

this.totalPage = totalPage;

}

public int getCurrentPage() {

return currentPage;

}

public void setCurrentPage(int currentPage) {

this.currentPage = currentPage;

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

/**

* 初始化分页信息

*/

public void init(){

this.isFirstPage = isFirstPage();

this.isLastPage = isLastPage();

this.hasPreviousPage = isHasPreviousPage();

this.hasNextPage = isHasNextPage();

}

/**

* 以下判断页的信息,只需getter方法(is方法)即可

* @return

*/

public boolean isFirstPage() {

return currentPage == 1; // 如是当前页是第1页

}

public boolean isLastPage() {

return currentPage == totalPage; //如果当前页是最后一页

}

public boolean isHasPreviousPage() {

return currentPage != 1; //只要当前页不是第1页

}

public boolean isHasNextPage() {

return currentPage != totalPage; //只要当前页不是最后1页

}

/**

* 计算总页数,静态方法,供外部直接通过类名调用

* @param pageSize 每页记录数

* @param allRow 总记录数

* @return 总页数

*/

public static int countTotalPage(final int pageSize,final int allRow){

int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;

return totalPage;

}

/**

* 计算当前页开始记录

* @param pageSize 每页记录数

* @param currentPage 当前第几页

* @return 当前页开始记录号

*/

public static int countOffset(final int pageSize,final int currentPage){

final int offset = pageSize*(currentPage-1);

return offset;

}

/**

* 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替

* @param page 传入的参数(可能为空,即0,则返回1)

* @return 当前页

*/

public static int countCurrentPage(int page){

final int curPage = (page==0?1:page);

return curPage;

}

}

2、分页用到的PageAction.java

/**

* author:lez

*/

package com.testssh.action;

import java.util.List;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

import com.testssh.entity.PageBean;

import com.testssh.entity.Person;

import com.testssh.service.PageService;

/**

* @author LEZ

* 2015年7月9日

*/

public class PageAction extends ActionSupport implements ModelDriven<Person>{

/**

*

*/

private static final long serialVersionUID = 9204107205966488044L;

private PageBean pageBean; //包含分布信息的bean

private int page; //第几页

private PageService pageService;

private Person person=new Person();

public PageService getPageService() {

return pageService;

}

public void setPageService(PageService pageService) {

this.pageService = pageService;

}

public int getPage() {

return page;

}

public void setPage(int page) {

this.page = page;

}

public PageBean getPageBean() {

return pageBean;

}

public void setPageBean(PageBean pageBean) {

this.pageBean = pageBean;

}

/**

* author:lez

* data:2015-7-10

* 分页的主要action方法

*/

public String getPersonForPage(){

this.pageBean = pageService.getPersonForPage(page);

List<Person> lists=pageBean.getList();

System.out.println("lists="+lists);

ActionContext.getContext().put("lists",lists);

ActionContext.getContext().put("pageBean",pageBean);

return "nba";

}

public Person getPerson() {

return person;

}

public void setPerson(Person person) {

this.person = person;

System.out.println("person==="+person);

}

public String save(){

System.out.println("person="+person);

pageService.save(person);

return "index";

}

@Override

public Person getModel() {

return person;

}

}

3、struts.xml中分页用到的

<action name="page_*" class="com.testssh.action.PageAction" method="{1}">

<result name="nba">/NBA.jsp</result>

<result name="index">/index.jsp</result>

</action>

4、分页用到的dao,PageDao.java

package com.testssh.dao;

import java.util.List;

import com.testssh.entity.Person;

public interface PageDao {

public int getAllRowCount(String hql);

public List<Person> queryForPageByUpload(String hql, int offset, int length);

}

5、分页用到的dao实现类

package com.testssh.dao.Impl;

import java.util.List;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import com.testssh.dao.PageDao;

import com.testssh.entity.Person;

public class PageDaoImpl implements PageDao{

private SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {

return sessionFactory;

}

public void setSessionFactory(SessionFactory sessionFactory) {

this.sessionFactory = sessionFactory;

}

public Session getSession(){

return sessionFactory.getCurrentSession();

}

@Override

public int getAllRowCount(String hql) {

System.out.println("hql="+hql);

return getSession().createQuery(hql).list().size();

}

@Override

public List<Person> queryForPageByUpload(String hql, int offset, int length) {

Query query=(Query) getSession().createQuery("FROM Person");

query.setFirstResult(offset).setMaxResults(length);

return query.list();

}

}

6、分页用到的service

package com.testssh.service;

import com.testssh.entity.PageBean;

import com.testssh.entity.Person;

public interface PageService {

public PageBean getPersonForPage(int page);

public void save(Person person);

}

7、service的实现类

package com.testssh.service.Impl;

import java.util.List;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import com.testssh.dao.PageDao;

import com.testssh.entity.PageBean;

import com.testssh.entity.Person;

import com.testssh.service.PageService;

/**

* 分页相关service实现类

* @author lez

* 2015-7-10

*

*/

public class PageServiceImpl implements PageService{

private SessionFactory sessionFactory;//注入sessionFactory

private PageDao pageDao; //注入PageDao

public SessionFactory getSessionFactory() {

return sessionFactory;

}

public PageDao getPageDao() {

return pageDao;

}

public void setPageDao(PageDao pageDao) {

this.pageDao = pageDao;

}

public void setSessionFactory(SessionFactory sessionFactory) {

this.sessionFactory = sessionFactory;

}

public Session getSession(){ //获取session

return sessionFactory.getCurrentSession();

}

/**

* 分页主要方法并把获取到的信息保存到PageBean中

*/

@Override

public PageBean getPersonForPage(int page) {

String hql = "FROM Person"; //查询语句

int allRow = pageDao.getAllRowCount(hql); //总记录数

System.out.println("allRow="+allRow);

int totalPage = PageBean.countTotalPage(3,allRow); //总页数

final int offset = PageBean.countOffset(3,page); //当前页开始记录

final int length = 3; //每页记录数

final int currentPage = PageBean.countCurrentPage(page);

List<Person> list = pageDao.queryForPageByUpload(hql,offset,length); //"一页"的记录

//把分页信息保存到Bean中

PageBean pageBean = new PageBean();

pageBean.setPageSize(3);

pageBean.setCurrentPage(currentPage);

pageBean.setAllRow(allRow);

pageBean.setTotalPage(totalPage);

pageBean.setList(list);

pageBean.init();

return pageBean;

}

@Override

public void save(Person person) {

getSession().save(person);

}

}

8、最后是页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML>

<html>

<head>

<title>NBA超级球星名单</title>

<link href="bootstrap-3.3.4-dist/css/bootstrap.min.css" rel="stylesheet">

<script src="jquery/jquery-1.9.1.js"></script>

<script src="bootstrap-3.3.4-dist/js/bootstrap.min.js"></script>

<!-- 这个css样式是用来控制分页代码的样式 -->

<style type="text/css">

a.div{border:1px solid;border-color:#CDDBE8;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;padding:6px 6px 6px 6px;color:black;text-decoration:none;}

a.div:link{color:#000000;text-decoration:none;}

a.div:visited {color:#000000;background:#E6E6E6;text-decoration:none;}

a.div:hover {color:#000000;background:#E6E6E6;text-decoration:none;}

a.div:active {color:#FFFFFF;border:1px solid #25C6FD;text-decoration:none;}

a.count{border:1px solid;border-color:#CDDBE8;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;padding:6px 8px 6px 8px;color:black;text-decoration:none;}

a.count:link{color:#000000;text-decoration:none;}

a.count:visited {color:#000000;background:#E6E6E6;text-decoration:none;}

a.count:hover {color:#000000;background:#E6E6E6;text-decoration:none;}

a.count:active {color:#FFFFFF;border:1px solid #25C6FD;text-decoration:none;}

</style>

<!-- 这段js代码用来控制当前页页码的颜色和其他页码颜色的不一样, -->

<script type="text/javascript">

$(function(){

//鼠标悬停在分页按钮上,按钮的颜色会变成蓝色

$("a[class='count']").hover(function(){

$(this).css("background","#005AA0");

});

//鼠标离开分页按钮,则按钮的颜色恢复为原来的默认颜色

$("a[class='count']").mouseout(function(){

$(this).css("background","#ffffff");

});

//当前页的页码为红色

$("a[class='count']").each(function(){

var current=$(this).text();

var page=$("#currentPage").val();

if(current==page){

$(this).css("border","0");

$(this).css({"color":"red"});

}

});

});

</script>

</head>

<body>

<table class="table table-hover">

<thead>

<tr>

<th>名字</th><th>所属球队</th><th>年龄</th><th>位置</th><th>身价</th>

</tr>

</thead>

<tbody>

<s:iterator value="#lists"> <!-- 遍历的方式显示查询到的数据 -->

<tr>

<td>${name}</td>

<td>${team}</td>

<td>${age}</td>

<td>${position}</td>

<td>${worth}</td>

</tr>

</s:iterator>

</tbody>

</table>

<!--以下为分页代码。。。。 存放当前页码数 -->

<input type="hidden" id="currentPage" value="${pageBean.currentPage}">

<div style="margin-left:430px;margin-bottom:0px;">

<!-- 判断当前页是否位1,如果不为1则显示上一页, -->

<s:if test="%{pageBean.currentPage != 1}">

<a class="div" href="page_getPersonForPage.action?page=${pageBean.currentPage-1}">

<span class="glyphicon glyphicon-hand-left"></span>上一页

</a>

</s:if>

<!-- 如果页码数大于4,则判断在上一页后边显示三个点 -->

<s:if test="pageBean.currentPage>4">

<span>...</span>

</s:if>

<s:if test="pageBean.allRow/3>5">

<!-- 存放当前页码数 -->

<input type="hidden" id="currentPage1" value="${pageBean.currentPage}">

<!-- 这个判断让页面动起来 -->

<s:if test="pageBean.currentPage>4">

<a class="count" href="page_getPersonForPage.action?page=${pageBean.currentPage-2}">${pageBean.currentPage-2}</a>

<a class="count" href="page_getPersonForPage.action?page=${pageBean.currentPage-1}">${pageBean.currentPage-1}</a>

<a class="count" href="page_getPersonForPage.action?page=${pageBean.currentPage}">${pageBean.currentPage}</a>

<!-- 判断页码数到最后了就不要显示省略点了 -->

<s:if test="(pageBean.currentPage+2)<=(pageBean.allRow/3)">

<a class="count" href="page_getPersonForPage.action?page=${pageBean.currentPage+1}">${pageBean.currentPage+1}</a>

<a class="count" href="page_getPersonForPage.action?page=${pageBean.currentPage+2}">${pageBean.currentPage+2}</a>

</s:if>

</s:if>

<!-- 如果页面没有大于5那就先用写死的页码 -->

<s:else>

<a class="count" href="page_getPersonForPage.action?page=1">1</a>

<a class="count" href="page_getPersonForPage.action?page=2">2</a>

<a class="count" href="page_getPersonForPage.action?page=3">3</a>

<a class="count" href="page_getPersonForPage.action?page=4">4</a>

<a class="count" href="page_getPersonForPage.action?page=5">5</a>

</s:else>

<!-- 如果当前页加上2还大于总页数,那么三个点就显示,否则不显示 -->

<s:if test="(pageBean.currentPage+2)<(pageBean.allRow/3)">

<span>...</span>

</s:if>

</s:if>

<s:else>

<!-- 当页码数小于5时,用bean标签实现页面的遍历 -->

<s:bean name="org.apache.struts2.util.Counter" id="counter">

<s:param name="first" value="1" />

<s:param name="last" value="pageBean.totalPage" />

<s:iterator>

<a class="count" href="page_getPersonForPage.action?page=<s:property/>"><s:property/></a>

</s:iterator>

</s:bean>

</s:else>

<s:if test="%{pageBean.currentPage != pageBean.totalPage}">

<a class="div" href="page_getPersonForPage.action?page=${pageBean.currentPage+1}">

下一页<span class="glyphicon glyphicon-hand-right" title="fen"></span>

</a>

</s:if>

<span>共<s:property value="pageBean.totalPage"/>页</span>   

<s:form action="page_getPersonForPage.action" theme="simple" style="display: inline;">

<span>跳转到第<s:textfield name="page" style="width:20px;" value="1"></s:textfield>页</span>

<s:submit value="确定"></s:submit>

</s:form>

</div>

<!-- -----分页结束----- -->

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: