rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » JavaEE

使用FreeMarker的宏来实现Struts2的分页显示

关键字: struts2, freemarker, 分页 看到一些朋友在Struts2中,依然使用标签来实现分页显示,而在基于Struts2的开发中,可能很多朋友会采用FreeMarker模板来渲染表示层,那么对于采用FreeMarker进行渲染的页面来说,我在这里提出一种使用FreeMarker的宏来实现分页显示的作法,这种作法,我感觉更简单灵活。
貌似在网上也没找到类似的作法,所以,如果这种作法有什么隐患或性能问题,还请朋友们批评。 注:下面的代码只是示例性质的,难免有一些Bug或考虑不全之处存在,希望大家不必对代码本身过多要求,更多的是看一下这种作法是否可取。 首先,看一下使用方法。
在需要进行分页显示的文件中,引入分页显示的ftl库文件。
Xml代码
  • <#import "*/common/pager.ftl" as pager>  
  • <#import "*/common/pager.ftl" as pager>
    在需要显示分页列表的位置,加入以下代码,实现分页显示。
    Java代码
  • <@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代码
  • <#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}">&lt;&lt;</a>  
  •     <#else>  
  •         <span class="disabled">&lt;&lt;</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}">&gt;&gt;</a>  
  •     <#else>  
  •         <span class="disabled">&gt;&gt;</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>  
  • <#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}">&lt;&lt;</a> <#else> <span class="disabled">&lt;&lt;</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}">&gt;&gt;</a> <#else> <span class="disabled">&gt;&gt;</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参数,调整分页显示时最多显示的页号数。 转载:http://netfork.javaeye.com/blog/290477
    顶一下
    (2)
    踩一下
    (0)