2017朝阳区四惠房价:使用FreeMarker的宏来实现Struts2的分页显示

来源:百度文库 编辑:中财网 时间:2024/04/28 13:38:20
看到一些朋友在Struts2中,依然使用标签来实现分页显示,而在基于Struts2的开发中,可能很多朋友会采用FreeMarker模板来渲染表示层,那么对于采用FreeMarker进行渲染的页面来说,我在这里提出一种使用FreeMarker的宏来实现分页显示的作法,这种作法,我感觉更简单灵活。
貌似在网上也没找到类似的作法,所以,如果这种作法有什么隐患或性能问题,还请朋友们批评。

注:下面的代码只是示例性质的,难免有一些Bug或考虑不全之处存在,希望大家不必对代码本身过多要求,更多的是看一下这种作法是否可取。

首先,看一下使用方法。
在需要进行分页显示的文件中,引入分页显示的ftl库文件。
Xml代码
  1. <#import "*/common/pager.ftl" as pager>  


在需要显示分页列表的位置,加入以下代码,实现分页显示。
Java代码
  1. <@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.          href="?page=1${requestParams}"><<  
  18.     <#else>  
  19.          class="disabled"><<  
  20.     #if>  
  21.     <#-- 前组-->  
  22.     <#if offset gt 0>  
  23.          href="?page=${offset * maxsteps}${requestParams}">  
  24.     <#else>  
  25.          class="disabled">  
  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.                  href="?page=${num}${requestParams}">${num}  
  37.             <#else>  
  38.                 ${num}  
  39.             #if>  
  40.         #list>  
  41.     #if>  
  42.     <#-- 下组 -->  
  43.     <#if offset lt offsetLast>  
  44.          href="?page=${(offset + 1) * maxsteps + 1}${requestParams}">  
  45.     <#else>  
  46.          class="disabled">  
  47.     #if>  
  48.     <#-- 尾页 -->  
  49.     <#if ipage lt totalpage>  
  50.          href="?page=${totalpage}${requestParams}">>>  
  51.     <#else>  
  52.          class="disabled">>>  
  53.     #if>  
  54.     <#-- 前一页 -->  
  55.     <#if ipage gt 1>  
  56.          href="?page=${ipage - 1}${requestParams}">前一页  
  57.     <#else>  
  58.          class="disabled">前一页  
  59.     #if>  
  60.     <#-- 后一页 -->  
  61.     <#if ipage lt totalpage>  
  62.          href="?page=${ipage + 1}${requestParams}">后一页  
  63.     <#else>  
  64.          class="disabled">后一页  
  65.     #if>  
  66. #macro>  


对另外两个参数特别说明一下。
params:有时,我们分页的内容是通过查询获得的,或是分页中还有其他参数时,可以作为附加的参数附在分页URL后面。
maxsteps:目前的分页效果类似于.net中DataView的默认分页效果,默认当分页数超过六页时,最多显示六个页号。当然可以通过maxsteps参数,调整分页显示时最多显示的页号数。
谁有FreeMarker的帮助文档?? 请问如何使用ACDSEE8。0来实现图片格式的转化? 好心人帮忙!!vb中~使用str()函数时的空格问题 使用IP解析加上程序的方法实现 ,而不是通过转发来使用。 怎么使用代理来实现游戏代理 网通的可不可以使用HUB来实现共享接入INTERNET? 如果可以的话该如何实现呢?? 在CONGIG.SYS中安装设备驱动程序是通过使用什么命令来实现的? 如何使用手机卡利用QQ和手机之间的漏洞来实现各种QQ业务 请问,我怎样使用路由器和交换机,这两个东西来实现上网的要求 请大家帮下忙 str字幕文件该怎样使用? 现在有一个字符串型数组 STR[]={"K","L","M"},K,L,M是INT型变量,,我怎么通过STR[I]来获得,修改KLM的直?? 数据库高手来啊 STR(26.78 *100,3,3) 游戏里使用道具是用哪个键来实现? 网络互连类型有哪几类?分别使用什么设备来实现? 求助!如何使用dropdown控件来实现SQL查询 网络互连类型有哪几类?分别使用什么设备来实现? 懂电脑的来(这样实现播放视频要在电视上~然后还能正常使用电脑) 使用excel能不能实现这样的功能 在不使用第三方软件的情况下,如何通过修改注册表来实现在笔记本电脑上通过键盘的组合键来控制光驱弹出 电磁干扰是如何来实现的?? 电磁干扰是如何来实现的? 怎样用栈来实现表达式的值 通过场来实现的作用力 请问,如何不使用虚拟HUB或者OpenVPN来实现cmwap来上网可以保存COOKIES?