1.宏(macro)
寫法:
<#macro page url page maskSize=5>
? ??<#if (number == pages)>
??<li><a href="javascript:void(0);">下一頁</a></li>
??<li><a href="javascript:void(0);">尾頁</a></li>
? ? <#else>
? ? ? ? <li><a href="${buildPageUrl(url2,page.pageNum+1,page)}">(注:這個地方可以直接調用宏所在的FTL中的函數)下一頁</a></li> ??
? ? ? ? ?<li><a href="${buildPageUrl(url2,page.pages,page)}">尾頁</a></li> ??
? ? </#if>
</#macro>
引入方式:?<#import ?"/user/common/macro/page.ftl" as pg >
調用方式:<@pg.page url="${queryUrl}" page=page ?maskSize=10 /> ??
??
?
2.函數(function)
寫法:
?<#function buildPageUrl url pageNum data>
? ? <#assign pageUrl = "${url}?pageNum=${pageNum}&pageSize=${data.pageSize}">
? ? <#return pageUrl/>
</#function>
引入方式:<#include "/user/common/macro/date.ftl"/>
調用方式:?${buildPageUrl(url2,page.pageNum+1,page)}
3.不同的地方
???
? <#return/> 的用途、引入方式、?調用方式 都不同。
?
???宏:可以提前返回,比如<#return/>?
? ?但是不能<#return 1>,?A macro cannot return a value?
? 宏,主要作用是,拼接內容,把宏內部的字符串展示出來,return返回值沒有意義。
???函數:與宏的調用方式不同,直接?${buildPageUrl(url2,page.pageNum+1,page)}執行函數。
? 返回值才是最關鍵的結果,不是為了顯示函數內部的字符串內容。
? ?
---------------
補充一點,在宏所在的ftl中,同時定義了函數,宏中可以直接使用這個函數。