看到一些朋友在Struts2中,依然使用标签来实现分页显示,而在基于Struts2的开发中,可能很多朋友会采用FreeMarker模板来渲染表示层,那么对于采用FreeMarker进行渲染的页面来说,我在这里提出一种使用FreeMarker的宏来实现分页显示的作法,这种作法,我感觉更简单灵活。
貌似在网上也没找到类似的作法,所以,如果这种作法有什么隐患或性能问题,还请朋友们批评。
注:下面的代码只是示例性质的,难免有一些Bug或考虑不全之处存在,希望大家不必对代码本身过多要求,更多的是看一下这种作法是否可取。
首先,看一下使用方法。
在需要进行分页显示的文件中,引入分页显示的ftl库文件。
Xml代码
1. <#import "*/common/pager.ftl" as pager>
<#import "*/common/pager.ftl" as pager>
在需要显示分页列表的位置,加入以下代码,实现分页显示。
Java代码
1. <@pager.p page=page totalpage=totalPage />
<@pager.p page=page totalpage=totalPage />
其中,“p”是宏的名字;“page=page”中的第一个page是宏的参数,第二个page是来自Action对象中的属性(带有 get/set方法的成员变量),page属性主要是标注当前要显示的页号,即第几页;同样的,“totalpage=totalPage”也是类似的,totalpage属性主要是告诉分页宏,总页数是多少。
经过上面两段代码,再配合在Action中取得要显示数据的总页数,就可以分页了。
接下来,我们看一下分面效果截图。
最后,我们看一下分页效果的处理文件“pager.ftl”中宏“p”是如何定义的。
Xml代码
1. <#macro p page totalpage params='' maxsteps=6>
2. <#assign ipage=page?number>
3. <#if maxsteps <= 0>
4. <#assign maxsteps=5>
5. </#if>
6. <#assign offset = ((ipage - 1) / maxsteps)?int>
7. <#assign offsetLast = ((totalpage - 1) / maxsteps)?int>
8.
9. <#-- url附加参数的判断 -->
10. <#assign requestParams = "">
11. <#if (params?? && params != '')>
12. <#assign requestParams = '&' + params>
13. </#if>
14.
15. <#-- 首页 -->
16. <#if ipage gt 1>
17. <a href="?page=1${requestParams}"><<</a>
18. <#else>
19. <span class="disabled"><<</span>
20. </#if>
21. <#-- 前组-->
22. <#if offset gt 0>
23. <a href="?page=${offset * maxsteps}${requestParams}">…</a>
24. <#else>
25. <span class="disabled">…</span>
26. </#if>
27. <#-- 当前组中的页号-->
28. <#if (offset + 1) * maxsteps < totalpage>
29. <#assign pagelist = (offset + 1) * maxsteps>
30. <#else>
31. <#assign pagelist = totalpage>
32. </#if>
33. <#if ipage gt 0 && ipage lte totalpage>
34. <#list (offset * maxsteps + 1)..pagelist as num>
35. <#if ipage != num>
36. <a href="?page=${num}${requestParams}">${num}</a>
37. <#else>
38. <strong>${num}</strong>
39. </#if>
40. </#list>
41. </#if>
42. <#-- 下组 -->
43. <#if offset lt offsetLast>
44. <a href="?page=${(offset + 1) * maxsteps + 1}${requestParams}">…</a>
45. <#else>
46. <span class="disabled">…</span>
47. </#if>
48. <#-- 尾页 -->
49. <#if ipage lt totalpage>
50. <a href="?page=${totalpage}${requestParams}">>></a>
51. <#else>
52. <span class="disabled">>></span>
53. </#if>
54. <#-- 前一页 -->
55. <#if ipage gt 1>
56. <a href="?page=${ipage - 1}${requestParams}">前一页</a>
57. <#else>
58. <span class="disabled">前一页</span>
59. </#if>
60. <#-- 后一页 -->
61. <#if ipage lt totalpage>
62. <a href="?page=${ipage + 1}${requestParams}">后一页</a>
63. <#else>
64. <span class="disabled">后一页</span>
65. </#if>
66. </#macro>
<#macro p page totalpage params='' maxsteps=6>
<#assign ipage=page?number>
<#if maxsteps <= 0>
<#assign maxsteps=5>
</#if>
<#assign offset = ((ipage - 1) / maxsteps)?int>
<#assign offsetLast = ((totalpage - 1) / maxsteps)?int>
<#-- url附加参数的判断 -->
<#assign requestParams = "">
<#if (params?? && params != '')>
<#assign requestParams = '&' + params>
</#if>
<#-- 首页 -->
<#if ipage gt 1>
<a href="?page=1${requestParams}"><<</a>
<#else>
<span class="disabled"><<</span>
</#if>
<#-- 前组-->
<#if offset gt 0>
<a href="?page=${offset * maxsteps}${requestParams}">…</a>
<#else>
<span class="disabled">…</span>
</#if>
<#-- 当前组中的页号-->
<#if (offset + 1) * maxsteps < totalpage>
<#assign pagelist = (offset + 1) * maxsteps>
<#else>
<#assign pagelist = totalpage>
</#if>
<#if ipage gt 0 && ipage lte totalpage>
<#list (offset * maxsteps + 1)..pagelist as num>
<#if ipage != num>
<a href="?page=${num}${requestParams}">${num}</a>
<#else>
<strong>${num}</strong>
</#if>
</#list>
</#if>
<#-- 下组 -->
<#if offset lt offsetLast>
<a href="?page=${(offset + 1) * maxsteps + 1}${requestParams}">…</a>
<#else>
<span class="disabled">…</span>
</#if>
<#-- 尾页 -->
<#if ipage lt totalpage>
<a href="?page=${totalpage}${requestParams}">>></a>
<#else>
<span class="disabled">>></span>
</#if>
<#-- 前一页 -->
<#if ipage gt 1>
<a href="?page=${ipage - 1}${requestParams}">前一页</a>
<#else>
<span class="disabled">前一页</span>
</#if>
<#-- 后一页 -->
<#if ipage lt totalpage>
<a href="?page=${ipage + 1}${requestParams}">后一页</a>
<#else>
<span class="disabled">后一页</span>
</#if>
</#macro>
对另外两个参数特别说明一下。
params:有时,我们分页的内容是通过查询获得的,或是分页中还有其他参数时,可以作为附加的参数附在分页URL后面。
maxsteps:目前的分页效果类似于.net中DataView的默认分页效果,默认当分页数超过六页时,最多显示六个页号。当然可以通过maxsteps参数,调整分页显示时最多显示的页号数。
分享到:
相关推荐
freemarker结合struts2分页,在后台接收当前页和每页显示条数即可,其他可按照需求自行更改
Spring,Spring Data Jpa,freemarker,bootstrap实现的分页源代码
在struts2中使用freemarker模版.doc
自己写的一个框架例子,公司也在用,框架是struts2+hibernate+freemarker
不过由于小弟资历浅薄,也没心思看,主要是strut2的标签本来我就觉得不大习惯,另外上个月接触了freemarker后,实在是用的爽死了,为什么不用freemarker的macro指令写个通用的分页呢?马上想到模仿TX的...
使用struts2的freemarker模板扩展struts标签
适合初学freemarker的人参考的一个简单登录代码。主要是实现freemarker与struts2的整合
freemarker与struts2详细配置.
struts2+spring2.5+hibernate3.2 + freemarker 全新功能实现的增删改查+freemarker 摸版 struts2 的方式自己去看简单。 spring2.5 是用注释来注入 hibernate3.2 是用ejb3注解映射关系 hibernate3 +个属性可以自动...
这个例子是Freemarker整合Struts2分页,包含了struts2和Freemarker的jar包,可以直接下载导入到Eclipse中运行.
FreeMarker与Struts2结合的部署
采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...
这是FreeMarker通用的分页
学习freemarker后 发现网上用宏实现分页的例子几乎没有,所以自己写了个。
Struts2 和freemarker实例 简单STRUTS2的使用,和freeMarker的使用
1.FreeMarker 2.3.16pdf手册 2.struts2+freemarker web项目例子,可以运行
NULL 博文链接:https://cdxs2.iteye.com/blog/1923067
众所周知,struts2宣称freemarker模板中不再支持自定义标签,但如果工程UI仅用freemarker模板可以通过扩展struts标签简单实现,不是采用官方不推荐的配置JspSupportServlet实现的!内付详细说明及范例,此方法仅为团队...
Java freemarker demo 【struts + freemarker】 自己修改的一个小例子,可以运行的,如果有问题修改一下jar包
freeMarker整合struts2实例调用模板生成html页面,对于初学者肯定有用的