看到一些朋友在Struts2中,依然使用標(biāo)簽來(lái)實(shí)現(xiàn)分頁(yè)顯示,而在基于Struts2的開發(fā)中,可能很多朋友會(huì)采用FreeMarker模板來(lái)渲染表示層,那么對(duì)于采用FreeMarker進(jìn)行渲染的頁(yè)面來(lái)說(shuō),我在這里提出一種使用FreeMarker的宏來(lái)實(shí)現(xiàn)分頁(yè)顯示的作法,這種作法,我感覺更簡(jiǎn)單靈活。
貌似在網(wǎng)上也沒找到類似的作法,所以,如果這種作法有什么隱患或性能問題,還請(qǐng)朋友們批評(píng)。
注:下面的代碼只是示例性質(zhì)的,難免有一些Bug或考慮不全之處存在,希望大家不必對(duì)代碼本身過多要求,更多的是看一下這種作法是否可取。
首先,看一下使用方法。 在需要進(jìn)行分頁(yè)顯示的文件中,引入分頁(yè)顯示的ftl庫(kù)文件。
- <#import "*/common/pager.ftl" as pager>
<#import "*/common/pager.ftl" as pager>
在需要顯示分頁(yè)列表的位置,加入以下代碼,實(shí)現(xiàn)分頁(yè)顯示。
- <@pager.p page=page totalpage=totalPage />
<@pager.p page=page totalpage=totalPage />
其中,“p”是宏的名字;“page=page”中的第一個(gè)page是宏的參數(shù),第二個(gè)page是來(lái)自Action對(duì)象中的屬性(帶有g(shù)et/set方法的成員變量),page屬性主要是標(biāo)注當(dāng)前要顯示的頁(yè)號(hào),即第幾頁(yè);同樣的,“totalpage=totalPage”也是類似的,totalpage屬性主要是告訴分頁(yè)宏,總頁(yè)數(shù)是多少。
經(jīng)過上面兩段代碼,再配合在Action中取得要顯示數(shù)據(jù)的總頁(yè)數(shù),就可以分頁(yè)了。
接下來(lái),我們看一下分面效果截圖。 最后,我們看一下分頁(yè)效果的處理文件“pager.ftl”中宏“p”是如何定義的。
- <#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附加參數(shù)的判斷 -->
- <#assign requestParams = "">
- <#if (params?? && params != '')>
- <#assign requestParams = '&' + params>
- </#if>
-
- <#-- 首頁(yè) -->
- <#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>
- <#-- 當(dāng)前組中的頁(yè)號(hào)-->
- <#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>
- <#-- 尾頁(yè) -->
- <#if ipage lt totalpage>
- <a href="?page=${totalpage}${requestParams}">>></a>
- <#else>
- <span class="disabled">>></span>
- </#if>
- <#-- 前一頁(yè) -->
- <#if ipage gt 1>
- <a href="?page=${ipage - 1}${requestParams}">前一頁(yè)</a>
- <#else>
- <span class="disabled">前一頁(yè)</span>
- </#if>
- <#-- 后一頁(yè) -->
- <#if ipage lt totalpage>
- <a href="?page=${ipage + 1}${requestParams}">后一頁(yè)</a>
- <#else>
- <span class="disabled">后一頁(yè)</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附加參數(shù)的判斷 -->
<#assign requestParams = "">
<#if (params?? && params != '')>
<#assign requestParams = '&' + params>
</#if>
<#-- 首頁(yè) -->
<#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>
<#-- 當(dāng)前組中的頁(yè)號(hào)-->
<#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>
<#-- 尾頁(yè) -->
<#if ipage lt totalpage>
<a href="?page=${totalpage}${requestParams}">>></a>
<#else>
<span class="disabled">>></span>
</#if>
<#-- 前一頁(yè) -->
<#if ipage gt 1>
<a href="?page=${ipage - 1}${requestParams}">前一頁(yè)</a>
<#else>
<span class="disabled">前一頁(yè)</span>
</#if>
<#-- 后一頁(yè) -->
<#if ipage lt totalpage>
<a href="?page=${ipage + 1}${requestParams}">后一頁(yè)</a>
<#else>
<span class="disabled">后一頁(yè)</span>
</#if>
</#macro>
對(duì)另外兩個(gè)參數(shù)特別說(shuō)明一下。
params:有時(shí),我們分頁(yè)的內(nèi)容是通過查詢獲得的,或是分頁(yè)中還有其他參數(shù)時(shí),可以作為附加的參數(shù)附在分頁(yè)URL后面。
maxsteps:目前的分頁(yè)效果類似于.net中DataView的默認(rèn)分頁(yè)效果,默認(rèn)當(dāng)分頁(yè)數(shù)超過六頁(yè)時(shí),最多顯示六個(gè)頁(yè)號(hào)。當(dāng)然可以通過maxsteps參數(shù),調(diào)整分頁(yè)顯示時(shí)最多顯示的頁(yè)號(hào)數(shù)。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。