`

struts s 标签通用分页

 
阅读更多

 我的习惯是直接贴代码,语言表达能力不好,懒得写。但是我贴代码会贴全,这样就不会让其他人跟我一样,有时候找不到使用的方法,还有去百度或者调整半天。真心觉得给部分代码如果有问题,很烦人,有时候很难找到问题。

这里struts 中action的调用就不详细讲解了,不懂先去了解,再回来看。

 

注意:火狐浏览器点击分页按钮请求一次,会调用两次action,其他浏览器不会,找了很久,没有解决方法,如果有人知道,欢迎指点。

后台action类:

import java.util.List;
import java.util.Map;

@SuppressWarnings("serial")
public class UserListAction extends ActionSupport {

	private UserService adminUserService;
	private List<TbUser> userList = null;
	private Page page = new Page();

	@SuppressWarnings("unchecked")
	@Override
	public String execute() throws Exception {
		log.info("查找用户列表");

		// 每页显示条数
		page.setEveryPage(3);
		// 获取数据
		Map<String, Object> map = adminUserService.findUserByPage(page);
		userList = map.get("list") == null ? null : (List<TbUser>) map.get("list");
		page = map.get("page") == null ? null : (Page) map.get("page");

		return "success";
	}

	public UserService getAdminUserService() {
		return adminUserService;
	}

	public void setAdminUserService(UserService adminUserService) {
		this.adminUserService = adminUserService;
	}

	public List<TbUser> getUserList() {
		return userList;
	}

	public void setUserList(List<TbUser> userList) {
		this.userList = userList;
	}

	public Page getPage() {
		return page;
	}

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

}

 

page类

public class Page {

	/** 是否有上一页 */
	private boolean hasPrePage;

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

	/** 每页的数量 */
	private int everyPage;

	/** 总页数 */
	private int totalPage;

	/** 当前页 */
	private int currentPage;

	/** 起始点 */
	private int beginIndex;

	/** 总记录数 */
	private int totalCount;

	/** 开始的页数 */
	private int startPage;

	/** 结束的页数 */
	private int endPage;

	/**
	 * @return totalCount
	 */
	public int getTotalCount() {
		return totalCount;
	}

	/**
	 * @param totalCount
	 */
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public Page() {

	}

	public Page(int everyPage) {
		this.everyPage = everyPage;
	}

	public Page(boolean hasPrePage, boolean hasNextPage, int everyPage, int totalPage, int currentPage, int beginIndex, int totalCount, int startPage, int endPage) {
		this.hasPrePage = hasPrePage;
		this.hasNextPage = hasNextPage;
		this.everyPage = everyPage;
		this.totalPage = totalPage;
		this.currentPage = currentPage;
		this.beginIndex = beginIndex;
		this.totalCount = totalCount;
		this.startPage = startPage;
		this.endPage = endPage;
	}

	public int getBeginIndex() {
		return beginIndex;
	}

	public void setBeginIndex(int beginIndex) {
		this.beginIndex = beginIndex;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public int getEveryPage() {
		return everyPage;
	}

	public void setEveryPage(int everyPage) {
		this.everyPage = everyPage;
	}

	public boolean getHasNextPage() {
		return hasNextPage;
	}

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

	public boolean getHasPrePage() {
		return hasPrePage;
	}

	public void setHasPrePage(boolean hasPrePage) {
		this.hasPrePage = hasPrePage;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getStartPage() {
		return startPage;
	}

	public void setStartPage(int startPage) {
		this.startPage = startPage;
	}

	public int getEndPage() {
		return endPage;
	}

	public void setEndPage(int endPage) {
		this.endPage = endPage;
	}

}

 

page工具类

public class PageUtil {

	// 静态方法
	public static Page createPage(Page page, int totalRecords) {
		return createPage(page.getEveryPage(), page.getCurrentPage(), totalRecords);
	}

	// 创建Page对象
	public static Page createPage(int everyPage, int currentPage, int totalRecords) {
		everyPage = getEveryPage(everyPage);
		currentPage = getCurrentPage(currentPage);
		int beginIndex = getBeginIndex(everyPage, currentPage);
		int totalPage = getTotalPage(everyPage, totalRecords);
		boolean hasNextPage = hasNextPage(currentPage, totalPage);
		boolean hasPrePage = hasPrePage(currentPage);
		int pageScope[] = getShowScope(currentPage, 10, totalPage);

		return new Page(hasPrePage, hasNextPage, everyPage, totalPage, currentPage, beginIndex, totalRecords, pageScope[0], pageScope[1]);
	}

	// 返回每页显示数目
	private static int getEveryPage(int everyPage) {
		return everyPage == 0 ? 10 : everyPage;
	}

	// 返回当前页
	private static int getCurrentPage(int currentPage) {
		return currentPage == 0 ? 1 : currentPage;
	}

	// 返回开始的索引
	private static int getBeginIndex(int everyPage, int currentPage) {
		return (currentPage - 1) * everyPage;
	}

	// 返回总页数
	private static int getTotalPage(int everyPage, int totalRecords) {
		int totalPage = 0;

		if (totalRecords % everyPage == 0)
			totalPage = totalRecords / everyPage;
		else
			totalPage = totalRecords / everyPage + 1;

		return totalPage;
	}

	// 返回是否有上一页。false:没有;true:有
	private static boolean hasPrePage(int currentPage) {
		return currentPage == 1 ? false : true;
	}

	// 返回是否有下一页。false:没有;true:有
	private static boolean hasNextPage(int currentPage, int totalPage) {
		return currentPage == totalPage || totalPage == 0 ? false : true;
	}

	private static int[] getShowScope(int currentPage, int showNum, int totalPage) {

		// 初始化开始页
		int startPage = currentPage <= 6 ? 1 : currentPage - 5;

		// 初始化结束页
		int endPage = showNum + startPage - 1;

		if (endPage > totalPage) {
			endPage = totalPage;
		}

		startPage = endPage - showNum + 1;

		if (startPage <= 0) {
			startPage = 1;
		}

		return new int[] { startPage, endPage };
	}

}

 

显示数据的Jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="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>用户列表</title>
</head>
<body>
	<ul>
		<s:iterator id="user" value="userList" status="statu">
			<li>
				<s:property value="#statu.count" /> 
				<s:property	value="#user.userId" /> 
				<s:property value="#user.userName" />
			</li>
		</s:iterator>
	</ul>
	<div>
		<!--页码-->
		<!-- 分页组件 -->
		<%@ include file="page.jsp"%>
		<!--页码 End-->
	</div>
</body>
</html>






 

通用page页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!-- 分页组件 -->
<s:if test="page.hasPrePage || page.hasNextPage">
	<div class="turnpage">
		<!-- 首页 -->
		<s:url id="goto" includeParams="none"> 
			<s:param name="page.currentPage" value="1" />
		</s:url>
		<s:a href="%{goto}" title="首页">
			<span>首页</span>
		</s:a>
		<!-- end首页 -->
		
		<!-- 上一页 -->
		<s:if test="page.hasPrePage">
			<s:url id="goto">
				<s:param name="page.currentPage" value="%{page.currentPage - 1}" />
			</s:url>
			<s:a href="%{goto}" title="上一页" id="prePage" >
				<span>上一页</span>
			</s:a>
		</s:if>
		<s:else>
			<span>上一页</span>
		</s:else>
		<!-- end上一页 -->

		<%-- 页面显示 --%>
		<s:if test="page.totalPage <= 10">
			<s:bean name="org.apache.struts2.util.Counter" id="counter">
				<s:param name="first" value="1" />
				<s:param name="last" value="page.totalPage" />
			</s:bean>
			<s:iterator value="#counter">
				<s:url id="goto">
					<s:param name="page.currentPage" value="top" />
				</s:url>
				<s:if test="top == page.currentPage">
					<a class="cur"><span><s:property /></span></a>
				</s:if>
				<s:else>
					<s:a href="%{goto}">
						<span><s:property /></span>
					</s:a>
				</s:else>
			</s:iterator>
		</s:if>
		<s:else>
			<s:bean name="org.apache.struts2.util.Counter" id="counter">
				<s:param name="first" value="%{page.currentPage - 4 >= 1 ? (page.currentPage > page.totalPage - 5 ? ( page.totalPage - 9 ) :( page.currentPage - 4 )) : 1}" />
				<s:param name="last" value="%{page.currentPage + 5 <= page.totalPage ? (page.currentPage < 5 ?  ( page.currentPage + (10 - page.currentPage) ) : (page.currentPage + 5)) : page.totalPage}" />
			</s:bean>
			 
			<s:iterator value="#counter">
				<s:url id="goto">
					<s:param name="page.currentPage" value="top" />
				</s:url>
				<s:if test="top == page.currentPage">
					<a class="cur"><span><s:property /></span></a>
				</s:if>
				<s:else>
					<s:a href="%{goto}">
						<span><s:property /></span>
					</s:a>
				</s:else>
			</s:iterator>
			<!--如果还有更多,显示... -->
			<s:if test="page.totalPage != #counter.last">
				<span>...</span>
			</s:if>
			<s:url id="goto">
				<s:param name="page.currentPage" value="page.totalPage" />
			</s:url>
			<s:a href="%{goto}" title="page.currentPage">
				<span><s:property value="page.totalPage"/></span>
			</s:a>
		</s:else>

		<!-- 下一页 -->
		<s:if test="page.hasNextPage">
			<s:url id="goto">
				<s:param name="page.currentPage" value="%{page.currentPage + 1}" />
			</s:url>
			<s:a href="%{goto}" title="下一页">
				<span>下一页</span>
			</s:a>
		</s:if>
		<s:else>
			<span>下一页</span>
		</s:else>
		<!-- end下一页 -->

		<%-- 尾页 --%>
		<s:url id="goto">
			<s:param name="page.currentPage" value="page.totalPage" />
		</s:url>
		<s:a href="%{goto}" title="尾页">
			<span>尾页</span>
		</s:a>
		<%-- end尾页 --%>
		
		<!-- 信息 
		&nbsp;&nbsp; 当前页: <s:property value="page.currentPage" /> / <s:property value="page.totalPage" /> 
		&nbsp;&nbsp; 每    页: <s:property value="page.everyPage" /> 条 
		&nbsp;&nbsp; 共    计: <s:property value="page.totalCount" /> 条&nbsp;&nbsp;
		end信息 -->
		
		<%--如果总页数少于100页,显示一个select选择跳转框 --%>
		<s:if test="page.totalPage <= 100">
			<s:bean name="org.apache.struts2.util.Counter" id="counter">
				<s:param name="first" value="1" />
				<s:param name="last" value="page.totalPage" />
			</s:bean>
			<select	onchange="window.location.href = this.options[this.selectedIndex].value;" size="1">
				<s:iterator value="#counter">
					<s:url id="goto">
						<s:param name="page.currentPage" value="top" />
					</s:url>
					<s:if test="top == page.currentPage">
						<option value="<s:property value="%{goto}"/>" selected="selected">
							第	<s:property /> 页
						</option>
					</s:if>
					<s:else>
						<option value="<s:property value="%{goto}"/>">
							第	<s:property /> 页
						</option>
					</s:else>
				</s:iterator>
			</select>
		</s:if>
	</div>
</s:if>

 

 

分享到:
评论

相关推荐

    struts1.2实现分页

    5. **JSP页面**:在JSP页面上,使用`&lt;s:iterator&gt;`标签遍历数据,使用`&lt;s:url&gt;`和`&lt;s:a&gt;`标签创建分页链接。同时,根据总页数计算上一页、下一页的链接。 四、优化与扩展 1. **缓存优化**:如果数据变化不频繁,...

    java 通用数字分页

    本主题主要讲解如何在Struts2中实现一个通用的数字分页功能。 首先,我们要理解分页的基本概念。分页是将大量数据分成若干页进行显示,用户可以通过点击页码或使用导航按钮来切换不同页。分页通常涉及两个关键参数...

    经典struts2分页方法 JAVA_WEB必备分页 源码

    7. **JSP/Freemarker标签库**:在视图层,可以使用Struts2提供的`s:iterator`标签或自定义的分页标签来方便地遍历和展示数据,同时生成分页链接。 8. **URL参数**:为了支持用户点击分页链接,我们需要在URL中传递...

    struts2 的分页

    Struts2提供了一些内置的标签库,如`s:iterator`用于遍历查询结果,`s:url`和`s:param`用于生成分页链接。同时,我们还需要显示一些分页信息,如总页数、上一页、下一页等,这些可以通过自定义Struts2标签实现。 4....

    一个高效简洁的Struts分页方法

    - `listcertificate.jsp`使用Struts标签库(例如`&lt;s:iterator&gt;`和`&lt;s:url&gt;`等)遍历ArrayList并展示数据,同时生成分页链接。 通过这种方式实现的分页,可以有效避免一次性加载所有数据带来的性能问题,提高系统...

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

    在STRUTS2中,你可以使用`&lt;s:iterator&gt;`标签遍历分页数据,而`&lt;s:url&gt;`和`&lt;s:a&gt;`标签则用于生成分页链接。JavaScript可以通过绑定事件监听器,比如jQuery的`click`事件,来监听用户对分页控件的操作,并发送异步请求...

    struts2分页模型

    在JSP页面中,通常会用到`&lt;s:iterator&gt;`标签遍历Action中传递过来的当前页数据,并提供上一页、下一页、跳转到指定页等按钮。这些按钮的链接需要携带当前页数作为参数,以便服务器端能够正确处理请求。 6. **URL...

    struts 分页

    6. **标签库的使用**:在JSP中,我们可以使用Struts的`&lt;s:url&gt;`和`&lt;s:a&gt;`标签创建分页链接。例如,创建一个链接到下一页的按钮,我们可以这样做: ``` &lt;s:url action="paginationAction" namespace="/" ...

    关于Struts+Hibernate分页的例子

    编写JSP页面,使用Struts2的标签库(如s:iterator和s:property)来遍历和显示查询结果。同时,创建分页导航链接,允许用户跳转到其他页面。这部分需要处理好参数传递,确保页码信息正确传递到Action。 6. **添加...

    Struts1 增删改查+分页

    - 视图层可能使用JSP、HTML、CSS和JavaScript构建用户界面,也可能使用Struts的标签库如`&lt;s:form&gt;`、`&lt;s:textfield&gt;`等简化开发。 8. **测试**: - 对Action类进行单元测试,确保每个方法都能正常工作。 - 使用...

    ssh实现分页

    这通常通过s:iterator标签结合s:url和s:param标签实现。同时,需要处理上一页、下一页、首页和末页的逻辑。 六、最佳实践 1. 尽量避免一次性加载所有数据,以减少内存占用和提高性能。 2. 分页参数应通过POST请求...

    java web 分页 设计

    这里使用了Struts2的`&lt;s:iterator&gt;`标签来遍历查询结果列表`recordList`,并在循环体内显示每一条记录。 2. **页码导航**: ```html &lt;s:iterator begin="%{beginPageIndex}" end="%{endPageIndex}" var="num"&gt; ...

    freemaker struts2

    2. **数据绑定**:在Freemarker模板中,可以使用`&lt;@s.action&gt;`或`&lt;@s.property&gt;`等标签来直接访问Struts2 Action中的属性,实现数据绑定。 3. **自定义标签**:`BasePagenationTag.java`表明可能存在自定义Struts2...

    J2EE电子商务系统开发从入门到精通:基于Struts和Hibernate技术实现

    - **Struts标签库**: - **Bean标签库**:用于操作Bean。 - **HTML标签库**:提供HTML元素的标签支持。 - **Logic标签库**:支持逻辑控制结构,如if-else条件判断等。 - **Struts开发环境搭建**: - **Java平台...

    SSH 实现Tag标签

    1. **Struts2 Tag库**:Struts2提供了一套丰富的标签库,如&lt;s:textfield&gt;用于创建输入字段,&lt;s:submit&gt;用于提交表单等。开发者可以根据需求扩展这些标签,实现自定义功能,例如添加验证规则或特定的样式。 2. **...

    J2EE电子商务系统从入门到精通--基于Struts和Hibernate技术实现.

    - **2.7 Struts标签库** - **2.7.1 Bean标签库**:这部分介绍了Bean标签库的功能,如创建、操作Bean对象。 - **2.7.2 HTML标签库**:这部分讲解了HTML标签库的作用,即生成动态HTML表单。 - **2.7.3 Logic标签库*...

    J2EE电子商务系统开发从入门到精通--基于Struts和Hibernate技术实现

    **2.7 Struts标签库** - **2.7.1 Bean标签库** - Bean标签库提供了对bean的操作支持,例如获取bean的属性值等。 - **2.7.2 HTML标签库** - HTML标签库提供了一系列生成HTML元素的方法,如表单元素等。 - **2.7.3 ...

    struts2做的BBS网站源代码

    同时,JSP页面作为视图层,会利用Struts2的标签库(例如`s:form`、`s:textfield`等)来生成表单和展示数据,提高开发效率和代码可读性。 此外,为了保证网站的安全性,开发者可能还应用了Struts2的安全插件,如防止...

Global site tag (gtag.js) - Google Analytics