`
Kenny.Lee
  • 浏览: 515753 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

分享struts2做的一个分页按钮样式

阅读更多
首先是分页内容的辅助类


package cn.com.timekey.drugmonitor.utils.db;

import java.util.Collections;
import java.util.List;

import org.hibernate.criterion.CriteriaSpecification;

/**
 * 分页常用的bean类。<br>
 * 里面包含搜索返回的List,查询条件DetachedCriteria及分页菜单用到的数据等。
 * 
 * @author KennyLee E-mail:kennylee26@gmail.com 2008-10-25
 * @param <T>
 */
public class PaginationSupport<T> {

	// Default page size
	public static final int PAGESIZE = 20;
	public static final int MENU_SIZE = 7;

	// total Rows
	private int totalRowsAmount;
	private int pageSize = PAGESIZE;
	private int totalPages;
	// current page number
	private int currentPage = 1;
	// next page number
	private int nextPage;
	// previous page number
	private int previousPage;
	// is has next page
	private boolean hasNext;
	// is has previous page
	private boolean hasPrevious;
	// current page start row number
	private int pageStartRow = 0;
	// current page end row number
	private int pageEndRow;
	private String[] pageMenuNum;
	private int menuSize = MENU_SIZE;
	// Pagination values
	@SuppressWarnings("unchecked")
	private List<T> items = Collections.EMPTY_LIST;
	// select detachedCriteria
	private CriteriaSpecification detachedCriteria;

	public PaginationSupport() {
	}

	/**
	 * 构造函数。
	 * 
	 * @param totalRows
	 *            总行数
	 * @param currentPage
	 *            当前页数
	 */
	public PaginationSupport(int totalRows, int currentPage) {
		setPaginationSupport(totalRows, currentPage);
	}

	/**
	 * general 构造函数。
	 * 
	 * @param totalRows
	 *            总行数
	 * @param currentPage
	 *            当前页数
	 * @param pageSize
	 *            每页显示数量。
	 */
	public PaginationSupport(int totalRows, int currentPage, int pageSize) {
		this.pageSize = pageSize;
		this.setPaginationSupport(totalRows, currentPage);
	}

	/**
	 * @param items
	 * @param totalCount
	 */
	public PaginationSupport(List<T> items, int totalCount) {
		setPageSize(PAGESIZE);
		setItems(items);
		int currentPage = 1;
		this.setPaginationSupport(totalCount, currentPage);
	}

	/**
	 * @param items
	 * @param totalCount
	 * @param startIndex
	 */
	public PaginationSupport(List<T> items, int totalCount, int startIndex) {
		setPageSize(PAGESIZE);
		setItems(items);
		int currentPage = (startIndex / pageSize) + 1;
		this.setPaginationSupport(totalCount, currentPage);
	}

	/**
	 * @param items
	 *            保存的目标List
	 * @param totalCount
	 *            查找的总行数
	 * @param pageSize
	 *            每页显示的行数
	 * @param startIndex
	 *            第几行开始
	 * 
	 */
	public PaginationSupport(List<T> items, int totalCount, int pageSize,
			int startIndex) {
		setPageSize(pageSize);
		setItems(items);

		int currentPage = (startIndex / pageSize) + 1;
		this.setPaginationSupport(totalCount, currentPage);
	}

	/**
	 * DetachedCriteria构造PS时的初始化方法。
	 * 
	 * @param items
	 *            保存的目标List
	 * @param totalCount
	 *            查找的总行数
	 * @param pageSize
	 *            每页显示的行数
	 * @param startIndex
	 *            第几行开始
	 * @param detachedCriteria
	 */
	public PaginationSupport(List<T> items, int totalCount, int pageSize,
			int startIndex, CriteriaSpecification detachedCriteria) {
		setPageSize(pageSize);
		setItems(items);
		int currentPage = (startIndex / pageSize) + 1;
		this.setPaginationSupport(totalCount, currentPage);
		setDetachedCriteria(detachedCriteria);
	}

	/**
	 * <p>
	 * 替换items,重新构造PaginationSupport对象。
	 * </p>
	 * 
	 * @param ps
	 * @param newItems
	 */
	public PaginationSupport(PaginationSupport<?> ps, List<T> newItems) {
		this(newItems, ps.getTotalRowsAmount(), ps.getPageSize(), ps
				.getPageStartRow());
	}

	public String[] getPageMenuNum() {
		return pageMenuNum;
	}

	public void setPageMenuNum(String[] pageMenuNum) {
		this.pageMenuNum = pageMenuNum;
	}

	public CriteriaSpecification getDetachedCriteria() {
		return detachedCriteria;
	}

	public void setDetachedCriteria(CriteriaSpecification detachedCriteria) {
		this.detachedCriteria = detachedCriteria;
	}

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

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

	public void setNextPage(int nextPage) {
		this.nextPage = nextPage;
	}

	public void setPreviousPage(int previousPage) {
		this.previousPage = previousPage;
	}

	public void setHasNext(boolean hasNext) {
		this.hasNext = hasNext;
	}

	public void setHasPrevious(boolean hasPrevious) {
		this.hasPrevious = hasPrevious;
	}

	public void setPageStartRow(int pageStartRow) {
		this.pageStartRow = pageStartRow;
	}

	public List<T> getItems() {
		return items;
	}

	public void setItems(List<T> items) {
		this.items = items;
	}

	/**
	 * 分页导航按钮
	 * 
	 * @param currentPage
	 * @return
	 */
	private String[] getPageMenuNums(int currentPage) {
		String[] pageNums = null;

		if (totalPages > menuSize) {// 总页数大于导航显示的页数

			pageNums = new String[menuSize];

			int lastMenuNum = totalPages - menuSize + 1;// 最后一列导航栏按钮

			int beginMumNum = menuSize;

			int x = menuSize - 1;// 导航显示系数

			if ((currentPage < lastMenuNum) && (currentPage > beginMumNum)) {

				for (int i = 0; i < menuSize; i++) {
					pageNums[i] = String.valueOf(currentPage + i - x / 2);
				}

			} else if (currentPage > lastMenuNum) {
				for (int i = 0; i < menuSize; i++) {
					pageNums[i] = String.valueOf(lastMenuNum + i);
				}
			} else if (currentPage == lastMenuNum) {

				if ((lastMenuNum - x / 2) < 1) {
					lastMenuNum = x / 2 + 1;
				}

				for (int i = 0; i < menuSize; i++) {
					pageNums[i] = String.valueOf(lastMenuNum + i - x / 2);
				}

			} else if (currentPage == beginMumNum) {
				for (int i = 0; i < menuSize; i++) {
					pageNums[i] = String.valueOf(1 + i + x / 2);
				}
			} else {
				for (int i = 0; i < menuSize; i++) {
					pageNums[i] = String.valueOf(1 + i);
				}
			}

		} else {// 总页数小于等于导航显示的页数,直接显示。
			pageNums = new String[totalPages];

			// 分页数比总页数少
			for (int i = 0; i < totalPages; i++) {
				pageNums[i] = String.valueOf(i + 1);
			}
		}
		return pageNums;
	}

	/**
	 * 设置总行数。
	 * 
	 * @param rows
	 *            总行数。
	 */
	private void setTotalRowsAmount(int rows) {

		if (rows < 0) {
			totalRowsAmount = 0;
		} else {
			totalRowsAmount = rows;
		}

		if (totalRowsAmount % pageSize == 0) {
			totalPages = totalRowsAmount / pageSize;
		} else {
			totalPages = totalRowsAmount / pageSize + 1;
		}
	}

	/**
	 * 设置当前页数。
	 * 
	 * @param curPage
	 */
	private void setCurrentPage(int curPage) {

		if (curPage <= 0) {
			currentPage = 1;
		} else if (curPage > totalPages) {
			currentPage = totalPages;
		} else {
			currentPage = curPage;
		}

		if (currentPage > 1) {
			hasPrevious = true;
		} else {
			hasPrevious = false;
		}

		if (currentPage == totalPages) {
			hasNext = false;
		} else {
			hasNext = true;
		}

		if (totalPages != 0) {
			nextPage = currentPage + 1;
			previousPage = currentPage - 1;
			// 计算当前页开始行和结束行
			pageStartRow = (currentPage - 1) * pageSize + 1;
			// 记录索引从0开始
			pageStartRow -= 1;
			pageEndRow = pageStartRow + pageSize;
		}
	}

	public void setPaginationSupport(int totalRows, int currentPage) {
		// 获取总页码,通过对象总数还是每页多少行的关系
		setTotalRowsAmount(totalRows);
		setCurrentPage(currentPage);
		String[] pageNums = getPageMenuNums(currentPage);
		this.setPageMenuNum(pageNums);
	}

	public void setPageEndRow(int pageEndRow) {
		this.pageEndRow = pageEndRow;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public boolean isHasNext() {
		return hasNext;
	}

	public boolean isHasPrevious() {
		return hasPrevious;
	}

	public int getNextPage() {
		return nextPage;
	}

	public int getPageSize() {
		return pageSize;
	}

	public int getPreviousPage() {
		return previousPage;
	}

	public int getTotalPages() {
		return totalPages;
	}

	public int getTotalRowsAmount() {
		return totalRowsAmount;
	}

	public int getPageStartRow() {
		return pageStartRow;
	}

	public int getPageEndRow() {
		return pageEndRow;
	}

	public String description() {
		String description = "Total:" + this.getTotalRowsAmount() + " items "
				+ this.getTotalPages() + " pages,Current page:"
				+ this.currentPage + " Previous " + this.hasPrevious + " Next:"
				+ this.hasNext + " start row:" + this.pageStartRow
				+ " end row:" + this.pageEndRow;
		return description;
	}

	public void init() {
		// do some initialization work
	}

	public int getMenuSize() {
		return menuSize;
	}

	public void setMenuSize(int menuSize) {
		this.menuSize = menuSize;
	}
}

 

查询页面内容后,使用 public PaginationSupport(List items, int totalCount, int startIndex)  构造方法来构造PaginationSupport实例。


然后我的action对应 PaginationSupport实例名字为 pageController(注意实现getPageController方法)。


初始化分页url,因为在很多情况下,分页是带查询参数,所以先把基本的url参数填上。参考如下:

<s:url value="asrd.do" id="pageUrl" escapeAmp="not">
	<s:param name="beginStrDate" value="%{beginStrDate}"></s:param>
	<s:param name="endStrDate" value="%{endStrDate}"></s:param>
	<s:param name="timeCodeStr" value="%{timeCodeStr}"></s:param>
	<s:param name="preTypeName" value="%{preTypeName}"></s:param>
	<s:param name="firstDepId" value="%{firstDepId}"></s:param>
	<s:param name="secondDepId" value="%{secondDepId}"></s:param>
</s:url>


这里的url不能使用action来构造链接,因为后面需要添加参数到url中,而用action的话会造成项目名重复的问题。所以退而求次的只能使用value构造链接,但就必须填上action的后缀了。


然后是分页按钮的标签jsp

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

<!-- pagination menu begin by KennyLee 2011-6-2 -->

<s:if test="(pageController != null) and pageController.items.size gt 0">
	<div id="pagination_info">[ 共 ${pageController.totalRowsAmount}
		条记录 ]&nbsp;${pageController.currentPage}/${pageController.totalPages}
		页(每页显示 ${pageController.pageSize})</div>
	<div class="pagination">
		<s:if test="%{pageController.hasPrevious}">
			<s:url id="previousPageUrl" value="%{pageUrl}">
				<s:param name="toPage" value="%{pageController.previousPage}"></s:param>
			</s:url>
			<s:a href="%{previousPageUrl}">&lt;Prev</s:a>
		</s:if>
		<s:else>
			<span class="disabled">&lt;Prev</span>
		</s:else>
		<s:iterator value="%{pageController.pageMenuNum}" status="status"
			var="num">
			<s:if test="#status.index eq 0">
				<s:url id="firstPageUrl" value="%{pageUrl}">
					<s:param name="toPage" value="1"></s:param>
				</s:url>
				<s:if test="%{#num eq 2}">
					<s:a href="%{firstPageUrl}">1</s:a>
				</s:if>
				<s:if test="%{#num gt 2}">
					<s:a href="%{firstPageUrl}">1</s:a>
					<span>...</span>
				</s:if>
			</s:if>
			<s:if test="#num eq pageController.currentPage">
				<span class="current"> <s:property
						value="%{pageController.currentPage}" /> </span>
			</s:if>
			<s:else>
				<s:url id="listPageUrl" value="%{pageUrl}">
					<s:param name="toPage" value="%{num}"></s:param>
				</s:url>
				<s:a href="%{listPageUrl}">
					<s:property value="%{num}" />
				</s:a>
			</s:else>
			<s:if test="(pageController.menuSize - 1) eq #status.index ">
				<s:url id="lastPageUrl" value="%{pageUrl}">
					<s:param name="toPage" value="%{pageController.totalPages}"></s:param>
				</s:url>
				<s:if test="(pageController.menuSize - 1) eq #num">
					<s:a href="%{lastPageUrl}">
						<s:property value="%{pageController.totalPages}" />
					</s:a>
				</s:if>
				<s:if test="#num lt (pageController.totalPages-1)">
					<span>...</span>
					<s:a href="%{lastPageUrl}">
						<s:property value="%{pageController.totalPages}" />
					</s:a>
				</s:if>
			</s:if>
		</s:iterator>
		<s:if test="pageController.hasNext">
			<s:url id="nextPageUrl" value="%{pageUrl}">
				<s:param name="toPage" value="%{pageController.nextPage}"></s:param>
			</s:url>
			<s:a href="%{nextPageUrl}">Next&gt;</s:a>
		</s:if>
		<s:else>
			<span class="disabled">Next&gt;</span>
		</s:else>
	</div>
	<!-- pagination menu end -->
</s:if>


按钮样式

/******************** page start **************************/

div.pagination {
	padding-right: 3px;
	padding-left: 3px;
	padding-bottom: 3px;
	margin: 3px;
	padding-top: 3px;
	text-align: center;
}

div.pagination a {
	border-right: #dedfde 1px solid;
	padding-right: 6px;
	background-position: 50% bottom;
	border-top: #dedfde 1px solid;
	padding-left: 6px;
	padding-bottom: 2px;
	border-left: #dedfde 1px solid;
	color: #0061de;
	margin-right: 3px;
	padding-top: 2px;
	border-bottom: #dedfde 1px solid;
	text-decoration: none
}

div.pagination a:hover {
	border-right: #000 1px solid;
	border-top: #000 1px solid;
	background-image: none;
	border-left: #000 1px solid;
	color: #fff;
	border-bottom: #000 1px solid;
	background-color: #0061de
}

div.pagination a:active {
	border-right: #000 1px solid;
	border-top: #000 1px solid;
	background-image: none;
	border-left: #000 1px solid;
	color: #fff;
	border-bottom: #000 1px solid;
	background-color: #0061de
}

div.pagination span.current {
	padding-right: 6px;
	padding-left: 6px;
	font-weight: bold;
	padding-bottom: 2px;
	color: #ff0084;
	margin-right: 3px;
	padding-top: 2px
}

div.pagination span.disabled {
	padding-right: 6px;
	padding-left: 6px;
	padding-bottom: 2px;
	color: #adaaad;
	margin-right: 3px;
	padding-top: 2px
}

div#pagination_info {
	text-align: center;
}

/****end***/


最后效果如下:

  • 大小: 3.6 KB
1
1
分享到:
评论

相关推荐

    jquery java struts2 实现分页 非常好看的分页

    本教程将详细讲解如何利用jQuery、Java和Struts2框架来实现一个美观且可自定义样式的分页功能。 首先,jQuery是一个广泛使用的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互等任务。在分页场景...

    struts1.2实现分页

    2. **创建DAO**:编写一个`PaginationDAO`,实现分页查询的方法,如`getPagedData(int pageSize, int currentPage)`。 3. **数据模型**:创建一个`PaginationBean`,包含`List`类型的当前页数据,以及`int`类型的总...

    ext3+struts2+hibernate+spring的CRUD+分页

    "ext3+struts2+hibernate+spring的CRUD+分页"是一个典型的Java Web开发组合,用于实现全面的数据管理功能。这个组合充分利用了各个框架的优势,提供了一个强大的后端数据处理和前端展示的解决方案。 首先,EXT3是一...

    STRUTS2+JavaScript 的分页,而且国际化

    在分页场景下,Action类通常会包含获取数据库中分页数据的方法,并返回一个包含当前页码、总页数等信息的结果。JavaScript则在客户端负责展示分页界面和处理用户点击分页链接或按钮的事件,例如通过AJAX请求更新页面...

    Struts2中实现自定义分页标签 --功能扩充

    创建一个继承自`org.apache.struts2.views.jsp.ui.TagSupport`的类,例如`PaginationTag.java`。在这个类中,我们需要定义处理分页所需的各种属性,如每页记录数(pageSize)、总记录数(totalCount)、当前页数...

    struts分页jar包

    Struts分页jar包是一个专为Struts框架设计的组件,用于在Web应用程序中实现高效、便捷的分页功能。Struts是Apache软件基金会下的一个开源项目,它提供了一个MVC(模型-视图-控制器)架构,帮助开发者构建结构清晰、...

    S2H实现分页

    1. **配置Struts2 Action**:创建一个处理分页请求的Action类,该类中应包含当前页码、每页显示条数等属性,以及相应的getter和setter方法。这些属性将用于传递用户选择的分页参数。 2. **设置Action的Result**:在...

    JQuery + Struts 分页

    3. **Struts框架**:Struts是一个基于MVC(Model-View-Controller)模式的Java Web框架。在分页场景中,Controller部分由Struts的Action类处理。Action接收到Ajax请求后,根据请求参数(如页码)计算出数据的起始...

    struts2分页

    Struts2分页是Web开发中的一个重要概念,它主要用于提高用户体验,通过将大量数据分成小块,逐页显示,避免一次性加载过多数据导致页面响应慢或者浏览器崩溃。Struts2是一个流行的Java开源框架,用于构建MVC(模型-...

    jqGrid与Struts2的结合应用

    而Struts2则是一个流行的Java Web框架,它简化了MVC(Model-View-Controller)架构的实现,提供了丰富的动作、拦截器和结果集来处理HTTP请求。将jqGrid与Struts2结合,可以构建出高效、用户友好的数据管理界面。 在...

    struts经典分页

    在本篇文章中,我们将深入探讨Struts框架如何实现分页功能,并结合JSP(Java Server Pages)和相关的标签库来构建一个实用的分页解决方案。 首先,了解Struts的基本概念至关重要。Struts是一个开源的MVC(Model-...

    pager-taglib_struts2 安装使用

    Pager Taglib是Struts2的一个重要组成部分,它提供了分页功能,使我们能够轻松地处理大量数据的显示,提升用户体验。本文将详细介绍如何安装和使用Pager Taglib。 首先,我们需要了解Pager Taglib的核心概念。Pager...

    struts分页标签

    Struts分页标签是Java Web开发中Struts框架的一个重要组成部分,主要用于在用户界面展示大量数据时进行数据的分页处理。Struts框架是MVC(Model-View-Controller)设计模式的一种实现,旨在简化Java Servlet和JSP的...

    在struts2中使用JasperReports

    Struts2是一个流行的Java web框架,它为开发者提供了一种结构化的方式来构建应用程序,而JasperReports则是一款强大的报告生成工具。将JasperReports与Struts2整合,可以帮助我们在Web应用中轻松创建复杂的报表。 ...

    Jquery dataTable完整例子下载(取数据、分页、样式等)

    总结来说,`jQuery DataTables` 是一个功能强大的前端数据展示工具,与`Struts2`框架结合使用,可以构建出高效的Web应用,提供动态、交互的数据展示和管理功能。无论是数据的获取、分页、排序、过滤,还是样式的定制...

    比百度更强大的多种样式经典分页

    综上所述,这个名为“showpages.v1.1”的压缩包文件很可能包含了一个基于SSH框架的分页组件,该组件具有多种样式和强大的功能,旨在提供比百度现有分页更好的用户体验。对于Java Web开发者来说,理解和掌握这种分页...

    ext + struts2 例子

    5. Struts2:Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它简化了后端逻辑的处理,提供了动作映射、拦截器和结果视图等机制。Struts2的FileUpload拦截器能够处理文件上传请求,与EXT...

    jquery pagination分页插件使用详解(后台struts2)

    struts2是一个企业级Java EE Web应用框架,它通过一系列的Action来处理用户的请求。在struts2中,可以配置Action来处理用户的分页请求,并将数据以JSON格式返回给前端。 - **Action的配置:** 在struts2中,需要...

    ssh分页完整实例数据库mysql

    7. **前端分页控件**:在用户界面,可以使用Bootstrap的Pagination组件或其他自定义的分页样式,实现分页按钮的渲染和事件监听。 在`ShowLogs`文件中,可能是日志记录或演示分页效果的示例数据。学习此实例时,应...

    strust2分页

    Struts2 分页是Web开发中的一个重要概念,它主要用于处理大量数据时,避免一次性加载所有数据导致页面响应慢或者内存压力过大。Struts2作为一款流行的Java Web框架,提供了多种方式来实现分页功能,使得用户可以方便...

Global site tag (gtag.js) - Google Analytics