`

FreeMarker 写的一个分页macro(宏)测试

阅读更多

参考了一些网上的例子,改写了一个适合自己的分页宏,freemarker代码如下:

<#--
	 ######分页器#######
	 pageIndex:当前页码
	 totalpage:总页数
	 params:附加的额外参数
	 maxsteps:显示的页码个数
-->
<#macro pager 
		pageIndex totalpage params="" maxsteps=5>
	<#assign ipage=pageIndex?number/>
	<#if maxsteps lte 0>
		<#assign maxsteps=5/>
	</#if>
	<#assign offset = (maxsteps/2)?int />
		
	<#-- 添加 url 附加参数-->
	<#assign requestParams =""/>
	<#if params?? && params !="">
		<#assign requestParams ='&'+params/>
	</#if>
	<#--首页-->
	<#if ipage gt 1>
		<a href="?pageIndex=1${requestParams}" title="第一页">&lt;&lt;</a>
	<#else>
		<span class="disabled">&lt;&lt;</span>
	</#if>
	
	<#-- 前一页 -->
	<#if ipage gt 1>
		<a href="?pageIndex=${ipage-1}${requestParams}">前一页</a>
	<#else>
		<span class="disabled">前一页</span>
	</#if>
	
	<#--前一组-->
	<#if ipage gt maxsteps>
		<a href="?pageIndex=${ipage-maxsteps}${requestParams}" title="向前${maxsteps}页">...</a>
	<#else>
		<span style="display:none">...</span>
	</#if>
	<#--当前组中的页号-->
	<#if (ipage+offset) lt totalpage >
		<#if ipage lte maxsteps>
			<#assign pagelist = maxsteps/>
		<#else>
			<#assign pagelist = ipage+offset/>
		</#if>		
	<#else>
		<#assign pagelist = totalpage/>
	</#if>
	
	<#if ipage gt 0 && ipage lte totalpage>
		<#if ipage gt 0 && ipage lte maxsteps>
			<#assign start=1/>
		<#else>
			<#assign start=ipage-offset/>
		</#if>
		<#list start..pagelist as num>
			<#if ipage !=num>
				<a href="?pageIndex=${num}${requestParams}">${num}</a>
			<#else>
				<strong>${num}</strong>
			</#if>
		</#list>
	</#if>
	<#-- 下一组 -->
	<#if  totalpage-ipage gte maxsteps>
		<a href="?pageIndex=${ipage+maxsteps}${requestParams}" title="向后${maxsteps}页">...</a>
	<#else>
		<span style="display:none">...</span>
	</#if>
	<#-- 后一页 -->
	<#if ipage lt totalpage>
		<a href="?pageIndex=${ipage+1}${requestParams}">后一页</a>
	<#else>
		<span class="disabled">后一页</span>
	</#if>
	<#-- 尾页 -->
	<#if ipage lt totalpage>
		<a href="?pageIndex=${totalpage}&{requestParams}" title="最后一页">&gt;&gt;</a>
	<#else>
		<span class="disabled">&gt;&gt;</span>
	</#if>
</#macro>
分享到:
评论

相关推荐

    FreeMarker通用的分页

    分页宏(Macro)定义 FreeMarker中的宏允许我们封装可重用的代码块,这在实现通用分页时显得尤为重要。宏`genPagination`是为分页而创建的核心组件,其参数包括: - `url`:指定的URL,用于构建页面链接。 - `...

    freemarker 实现宏分页

    分页宏可以进一步优化,例如添加“跳转到任意页”功能,或者支持多种分页样式。此外,考虑性能问题,可以添加缓存机制,减少不必要的数据库查询。 在`freemarker 标签分页.txt`文件中,可能包含了具体的宏定义示例...

    freemarker自定义分页标签宏

    在FreeMarker中,我们可以利用宏(Macro)这一功能来实现自定义的分页逻辑。宏是可重用的模板片段,可以作为函数来调用,具有参数,可以封装复杂的模板代码。 1. **宏定义**: 在`pager.html`模板文件中,我们可以...

    freemarker的分页功能

    Freemarker是一个用于生成动态文本的模板引擎,它被广泛应用于Web开发中,用于将数据模型转换成HTML、XML或其他格式的文档。分页功能在Web应用中非常常见,它允许用户在大量数据中通过页面跳转来查看不同的数据片段...

    Freemarker分页

    Freemarker分页是Web开发中的一个重要概念,它主要用于在大量数据展示时,将结果集分割成多个小块,每次只加载一部分数据,提高页面加载速度并提升用户体验。在这个例子中,我们看到的是如何在使用Struts2框架的基础...

    freemarker自定义的通用分页指令(标签)源码和使用示例

    一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx

    httpclient,freemarker的静态化分页

    1. **设计模板**:根据网页设计,创建一个`freemarker`模板,定义好动态数据的占位符。 2. **请求数据**:使用`httpclient`发送HTTP请求,获取动态网页的数据,这可能包括分页链接、每页内容等。 3. **解析数据**...

    freemarker_struts2分页

    最后,为了使用户点击分页链接时能够正确跳转并更新页面,你需要在Action类中添加一个接收新页面参数的方法,然后重定向到同一个Action,以便FreeMarker重新渲染页面。 总的来说,FreeMarker和Struts2结合实现分页...

    FreeMarker使用Macro实例

    FreeMarker使用Macro实例,很好的学习资料。

    Spring,Spring Data Jpa,freemarker,bootstrap实现的分页源代码

    在本项目中,我们主要探讨了如何利用Spring框架、Spring Data JPA、FreeMarker模板引擎以及Bootstrap前端框架来实现一个高效且用户友好的分页功能。以下是对这些技术及其在分页实现中作用的详细解释。 **Spring框架...

    FreeMarker分页宏模板freemarker-pagenav.zip

    好用的 freemarker 分页宏模板dom结构比较主流的一个分页一排显示10个分页按钮(想定制的话把页码提取出来做为参数即可)pagenav.previousPage 存着上一页pagenav.totalPage 总页数pagenav.pageNo 当前页面页码page...

    FreeMarker技术资料大集合包括宏以及一些列中文开发手册和技术文档

    FreeMarker技术资料大集合包括宏以及一些列中文开发手册和技术文档其中包括:FreeMarker2.3.7_Manual_zh_CN,Freemarker-2.3.16 API,FreeMarker详细讲解,FreeMarker宏和freemarker中文手册。对新手学习freemarker...

    围绕分页的练习(1)(ssh+freemarker)

    标题“围绕分页的练习(1)(ssh+freemarker)”指的是一个关于使用Spring、Struts和Hibernate(SSH)框架以及Freemarker模板引擎进行分页功能实现的编程练习。SSH是一个流行的企业级Java web应用开发框架,而Freemarker...

    freemarker+struts2仿QQ分页效果

    不过由于小弟资历浅薄,也没心思看,主要是strut2的标签本来我就觉得不大习惯,另外上个月接触了freemarker后,实在是用的爽死了,为什么不用freemarker的macro指令写个通用的分页呢?马上想到模仿TX的...

    SSM+websocket+freemarker+mybatis分页插件+多数据源实现

    标题 "SSM+websocket+freemarker+mybatis分页插件+多数据源实现" 涉及到的是一个综合性的Java Web项目,其中包含了多个关键的技术组件。以下是这些技术组件的详细说明: 1. **Spring(SSM中的S)**:Spring是一个...

    freemarker实现一行两列算法

    Freemarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。这些模板几乎可以用来生成任何格式的输出,如HTML、XML、Java源代码等。Freemarker的核心功能是将数据模型与表现层分离,使得开发者能够更...

    freemarker分页

    分页是将一个大的数据集分割成若干小的部分,每个部分称为一页,用户可以逐页浏览,而不是一次性加载所有数据。这不仅有利于提升页面加载速度,还可以节省用户的浏览时间。 在Freemarker中实现分页,主要涉及到以下...

    原创 用FreeMarker宏 和 Jquery 做树(Hbiernate和JDBC版)

    标题 "原创 用FreeMarker宏 和 Jquery 做树(Hbiernate和JDBC版)" 描述了如何使用FreeMarker模板引擎的宏功能,结合jQuery库,创建一个可展示层次结构数据的树形视图。在这个过程中,可能涉及了两个主要的技术:...

    FreeMarker的一个DEMO

    在这个"FreeMarker的一个DEMO"中,我们可以通过提供的"StaticWebDemo"来深入了解FreeMarker的工作原理和应用场景。 1. **FreeMarker的基本概念** - **模板**: FreeMarker的核心是模板文件,通常以`.ftl`为扩展名。...

Global site tag (gtag.js) - Google Analytics