`
ziyu_1
  • 浏览: 194510 次
  • 来自: ...
社区版块
存档分类
最新评论

opencms分页实现

阅读更多
自己写了一个通用的分页页面,需要有分页的页面引入这个分页页面,并传入几个参数就可以了.

分页代码(JSP代码),样式也写在本页中:
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<style>
.news_page{
	margin-top:10px;
	text-align:right;
	}
.news_page a{
	border:#ccc 1px solid;
	padding:2px 5px;
	margin:0 2px;
	}
.news_page a:hover{
	background-color:#FFF8ED;
	}
.news_page .current{
	background-color:#EBEAEA;}
</style>
<%!
private static final int getParam(ServletRequest request, String name, int defval){
    String param = request.getParameter(name);
    if(param==null){
    	param = String.valueOf(request.getAttribute(name));
    }
    int value = defval;
    if (param != null) {
		try {
			value = Integer.parseInt(param);
		}catch (NumberFormatException ignore) {
		}
    }
    return value;
}
%>
<% 	
	int showNum = 7;//单数,保证中间位置
	int showOffset = (showNum - 1)/2;//当前页数向左右两边的便宜量
	int total = getParam(request,"total",0);
	if(total < 0)
		total = 0;
	int pageIndex = getParam(request,"pageIndex",1);
	if(pageIndex < 1)
		pageIndex = 1;
	int pageSize = getParam(request,"pageSize",10);
	if(pageSize < 1)
		pageSize = 10;
	int pageTotal = 0;
	if(total%pageSize == 0)
		pageTotal = total/pageSize;
	else
		pageTotal = total/pageSize + 1;
	
	int pageBegin = 0;
	int pageEnd = 0;
	if(pageTotal <= showNum){
		pageBegin = 1;
		pageEnd = pageTotal;
	}else{
		int offsetBegin = 0;
		int begin = pageIndex - showOffset;
		if(begin > 0)
			pageBegin = begin;
		else{
			pageBegin = 1;
			offsetBegin = 1 - begin;
		}
		
		int offsetEnd = 0;
		int end = pageIndex + showOffset;
		if(end <= pageTotal)
			pageEnd = end;
		else{
			pageEnd = pageTotal;
			offsetEnd = end - pageTotal;
		}
		pageBegin = pageBegin - offsetEnd > 0 ? pageBegin - offsetEnd : 1;
		pageEnd = pageEnd + offsetBegin <= pageTotal ? pageEnd + offsetBegin : pageTotal;
			 
	}
	
	 %>
<div class="news_page">  
  <%if(pageIndex > 1){ %>
  <a href="<cms:link>${param.pageUrl}?pageIndex=<%=pageIndex-1 %>&pageSize=<%=pageSize %></cms:link>">上一页</a>
  <%if(pageBegin > 1){ %><a href="<cms:link>${param.pageUrl}?pageIndex=1&pageSize=<%=pageSize %></cms:link>">1</a><%} %>
  <%} %>  
  <%for(int i = pageBegin; i<=pageEnd;i++){ %> 
  <%if(i == pageIndex) {%><a href="#this" class="current"><%=i %></a><%}%>
  <%if(i != pageIndex) {%><a href="<cms:link>${param.pageUrl}?pageIndex=<%=i %>&pageSize=<%=pageSize %></cms:link>"><%=i %></a><%}%>
  <%} %>  
  <%if(pageIndex < pageTotal){ %>
  <%if(pageEnd < pageTotal){ %><a href="<cms:link>${param.pageUrl}?pageIndex=<%=pageTotal %>&pageSize=<%=pageSize %></cms:link>"><%=pageTotal %></a><%} %>
  <a href="<cms:link>${param.pageUrl}?pageIndex=<%=pageIndex+1 %>&pageSize=<%=pageSize %></cms:link>">下一页</a>
  <%} %>
</div>


页面调用一共3部分:
1.获得链接带过来的参数
2.把参数传到cms:contentload标签中,读取对应位置和条数的列表
3.引入分页页面,把参数传到分页页面中去

代码1.获得链接带过来的参数,使用JSTL标签,主要是两个参数.
pageSize:每页的条数
pageIndex:当前的页数
<c:set var="pageSize" value="15" />
<c:if test="${not empty param.pageSize}"><c:set var="pageSize" value="${param.pageSize}" /></c:if>
<c:set var="pageIndex" value="1" />
<c:if test="${not empty param.pageSize}"><c:set var="pageIndex" value="${param.pageIndex}" /></c:if>


代码2.把参数传到cms:contentload标签中,读取对应位置和条数的列表.
要通过<cms:contentinfo var="info"/>来获得总条数,以便下面传给分页页面
<cms:contentload collector="allInFolderPriorityDateAsc" param="/exhibition/prospects/prospects_%(number).html|gmprospect" editable="true" pageIndex="${pageIndex}" pageSize="${pageSize}">
<cms:contentinfo var="info"/>
  ..................
  ...............
</cms:contentload>


代码3.引入分页页面,把参数传到分页页面中去
total:记录总条数
pageSize:每页的条数
pageIndex:当前的页数
pageUrl:分页的链接
<cms:include file="%(link.weak:/system/modules/xxx/elements/page.jsp)" >
		<cms:param name="total">${info.resultSize }</cms:param>
		<cms:param name="pageIndex">${pageIndex}</cms:param>
		<cms:param name="pageSize">${pageSize}</cms:param>
		<cms:param name="pageUrl">/exhibition/prospects/index.html</cms:param>
	</cms:include>
分享到:
评论

相关推荐

    opencms

    《OpenCms开发指南》:深入理解与定制OpenCms OpenCms是一款开源的内容管理系统,旨在为企业级网站提供高效、灵活的管理解决方案。由Alkacon Software开发,OpenCms支持多语言、多站点管理和内容版本控制等功能,是...

    OpenCMS

    - **案例研究**:通过实际案例分析,展示如何运用OpenCMS解决特定问题和实现特定目标。 #### 五、作者背景与贡献 Matt Butcher是一位资深的技术顾问,专注于开源软件领域。他在多个开源社区中活跃,包括OpenCMS、...

    OpenCms 7 Development(最好的OpenCms二次开发资料)

    此外,还会介绍如何使用OpenCms的工作流程模块,实现内容的审核和发布流程。 2. **模板系统**:OpenCms的模板语言XSLT是其核心优势之一。书中会深入探讨如何编写XSLT模板,以实现动态页面生成。同时,也会讲解XML...

    opencms9 java api

    其Java API 提供了丰富的功能,使得开发者可以通过编程方式与OpenCMS系统进行交互,实现内容的创建、管理、发布以及自定义功能的扩展。 在“opencms9 java api”文档包中,我们可以找到关于OpenCMS 9版本的详细API...

    OpenCms中文文档完整版

    OpenCms是一款强大的开源内容管理系统(CMS),专为构建和管理网站而设计。这款系统以其易用性、灵活性和可扩展性赢得了用户的喜爱。本文将深入解析OpenCms的中文文档,帮助用户快速掌握该系统的各项功能和操作。 ...

    opencms教程.rar

    8. **国际化与多语言支持**:说明如何在OpenCMS中实现多语言网站,包括内容翻译、语言切换设置等。 9. **集成与扩展**:讨论OpenCMS与其他系统的集成,如CRM、ERP等,以及如何通过API进行扩展开发。 10. **性能...

    opencms配置去掉2个opencms总结

    在标签中提到了“源码”和“工具”,这可能意味着博主在文章中详细介绍了如何通过源码理解和修改来实现这个目标,并可能提及了一些辅助工具,如IDE、版本控制工具(如Git)或性能分析工具。 由于没有具体的文件列表...

    OpenCms 内容类型模块

    如果需要对系统进行定制,通常会通过创建新的模块或覆盖默认设置来实现。 OpenCms9 版本是 OpenCms 的一个重要里程碑,引入了许多新特性与改进。例如,增强了用户体验,提升了性能,优化了工作流程,并提供了更强大...

    opencms路径去掉两个opencms的方法总结

    本文将详细探讨如何通过不同的方法去除URL中的冗余“opencms”,以实现更加简洁和友好的路径。 1. **配置Web服务器** - 如果你使用的是Apache HTTP Server,可以编辑`httpd.conf`文件,通过重写规则来修改URL。...

    opencms7.53源代码

    OpenCms是一个开源的内容管理系统(CMS),用于构建和管理企业级的网站。它基于Java技术栈,提供了一套全面的功能,包括内容创作、版本控制、工作流管理、多语言支持等。标题提到的是OpenCms的7.5.3版本,这是一个...

    OpenCms创建网站过程图解——献给OpenCms的初学者们

    ### OpenCms创建网站过程详解 #### 一、OpenCms简介及背景 OpenCms是一款开源的内容管理系统(Content Management System, CMS),它基于Java技术,主要用于构建和管理复杂的多语言网站。OpenCms提供了强大的功能集...

    opencms源码

    描述中提到的“实现网站的热部署”,意味着可以在不中断服务的情况下更新或升级OpenCms,这对于持续运营的网站非常重要。 4. **安装过程** - `install.html`可能是OpenCms的安装指南,详细说明了部署步骤,包括...

    opencms 内容管理入门指南

    - **编写业务逻辑**:实现模块的核心功能,这可能涉及Java类的编写和数据库交互。 - **设计模板**:使用OpenCMS的Alloy Template Engine创建HTML模板,定义内容的展示方式。 - **配置元数据**:定义内容类型、字段和...

    opencms二次开发

    4. **OpenCMS API**:学习和掌握OpenCMS提供的API,例如内容服务、用户管理、权限控制等,这将帮助你实现自定义功能。例如,`org.opencms.file.CmsObject`是核心接口,用于与OpenCMS系统交互。 5. **模块开发**:...

    OpenCms7Development+src

    配合源码,开发者可以深入探究OpenCms的内部实现,这对于进行二次开发尤其重要。源码分析可能涉及以下方面: 1. **源码结构**:了解各个模块和类的组织方式,掌握OpenCms的核心组件和它们之间的交互。 2. **核心...

    Eclipse中引用opencms

    OpenCms是一个专业级、开源Java CMS(内容管理系统),由Alkacon公司发起和维护,OpenCms完全基于Java和XML技术实现,内容维护方便、直观,类型定义简单、快速,基于Jsp的模板机制强大、灵活,OpenCms扩展机制可以很好...

    Alkacon_OpenCms_Products_and_Services.pdf

    从企业级扩展到技术支持再到专业培训,Alkacon 提供的解决方案旨在帮助企业最大限度地发挥 OpenCms 的潜力,实现业务目标的同时降低运营成本。通过这些产品和服务,无论是在功能扩展、技术支持还是人员培训方面,...

Global site tag (gtag.js) - Google Analytics