Freemarker分页宏
<#macro page pagination countlist url>
<#if pagination.totalPage gt 1>
<div class="pages" style="margin: 0px auto;">
<#if pagination.pageNo==1>
<span class="front" style = "background-color:yellow;">上一页</span>
<#else>
<a href = "${url}pageNo=${pagination.pageNo-1}">上一页</a>
</#if>
<#list countlist as countlist>
<#if pagination.pageNo== countlist>
<span class="current" style = "background-color:red;">${countlist}</span>
<#else>
<a href = "${url}pageNo=${countlist}">${countlist}</a>
</#if>
</#list>
<#if pagination.pageNo == pagination.totalPage >
<span class="front" style = "background-color:red;">下一页</span>
<#else>
<a href = "${url}pageNo=${pagination.pageNo+1}">下一页</a>
</#if>
当前页:${pagination.pageNo}
总页数:${pagination.totalPage}
总大小:${pagination.totalCount}
</div>
<#else>
</#if>
</#macro>
如果在Freemarker定义了ftl文件自动载入的话,就不需要引入文件了。如果没需要在html里面导入
<#include "/WEB-INF/ftl_lib/page.ftl">
而如果要使用分页的时候调用超级简单:
<@page pagination=pagination countlist= countlist
url = "/huisou/admin/picturecategory/member_toList.action"/>
所有需要分页的地方只需要传递一个参数就可以用分页宏,避免了页面代码臃肿,这也做到了代码重用
2: Freemarker页面标签总结
页面自定义数组 ls 为数组名称,可以单引号或者双引号
<#assign ls = ['a', 'b'.....] ?sort >
判断list是否存在:<#if list ? exists> </#if> 或<#if list ??> </#if>
遍历List: <#list list as i >${i.name}</#list>
Js字符转义 <script> alert("${err ? js_string}"); </script>
${i_index} 从0计数-- ${i_index+1}
比较复杂的list 涉及到每几个就换行
第一种实现
<#list list as a>
${list.content}
<#if (a_index+1)%3=0>
<br/>
<#else>
</#if>
</#list>
第二种(推荐Sequence内置的分段器: chunk)
<#list list?chunk(3) as row>
<div>*
<#list row as cell>
${cell.content}
</#list>
</div>
</#list>
注意:
<#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>
<#list seq?chunk(4) as row>
<ul> <li>
<#list row as cell>${cell_index+1}${cell}</#list>
</li></ul>
</#list>
==============
<#list seq?chunk(4, '<span style = "background-color:red;">暂时没有数据</span>') as row>
<ul> <li>
<#list row as cell>${cell_index+1}${cell}</#list>
</li></ul>
</#list>
注意第一种的index索引和list的数量一致,而下面一种和ul的数量 * chunk数一致
最后一个ul数据不够了,但是它的li个数和chunk数 是一样的
<!--what is freemarker?-->
<script src="/system_res/js/sysoption.js" type="text/javascript"></script>
<#list list as a>
<tr>
<@s.form method="post" action="sysoption_edit.action" οnsubmit="return checkform(this);">
<td align="left">
<input type = "hidden" id = "id" name = "sys.id" value = "${a.id}"/>${a.id}
</td>
<td align="left">
<input type = "hidden" name = "sys.name" value = "${a.name}"/>${a.name}
</td>
<td>
<#if a.setvalue ? length gt 30>
<input type = "text" style = "width:296px;" name = "myidvalue" value = "${a.setvalue[0..30]}" readOnly=true οndblclick="this.readOnly=false;this.value=token.value;" title = "${a.setvalue}"/>
<#else>
<input type = "text" style = "width:296px;" name = "myidvalue" value = "${a.setvalue}" readOnly=true οndblclick="this.readOnly=false;"/>
</#if>
<input type = "hidden" name = "token" value = "${a.setvalue}"/>
</td>
<td><input type = "submit"/></td>
</@s.form>
</tr>
</#list>
<!--以下是测试数据,优先实现,如果要控制显示的顺序从HTML管理-->
<#--<#include "/WEB-INF/ftl_lib/token_list.ftl">
<@list items=["e.huisou.com", "huisou.com", "dev.huisou.com"]/>
<@tokenmath.test foo = "myfor" bar = "mybar" baaz = 25*10-100/> 变量的赋值可以是任意正则表达式
-->
<!--test1-->
<#--<#assign user = "Joe Hider">${user}声明变量,并显示-->
<!--test2-->
<#--
<#import "/WEB-INF/ftl_lib/token_copyright.ftl" as my>
<#assign mail="myother@myother.com">
<@my.copyright date="1999-2002"/> 第一个调用
${my.mail}<br/> 全局变量
${mail} 局部变量,虽然名称都是mail但是Freemarker能区别出来
-->
<!--test3--><#--
<#import "/WEB-INF/ftl_lib/token_copyright.ftl" as my>
${my.mail}<br/>
<#assign mail="update hello micro@update test .com" in my>隐藏全局变量(克隆一份),而不是覆盖, in my只的是token_copyright.ftl文件,mail变量指向克隆过的变量
${my.mail}
-->
<#--
<#list ["loop 1"] as x> ${x}
<#list ["loop 2"] as x> ${x}
<#list ["loop 3"] as x>
${x}
</#list>
${x}
</#list>
${x}
</#list> 内部循环变量隐藏同名的外部循环变量
-->
<#--
<#assign answer=42/>
${answer?string.currency}
${answer?string.percent}
-->
<!--以下是测试数据,优先实现,如果要控制显示的顺序从HTML管理-->
<#--
<#include "/WEB-INF/ftl_lib/token_list.ftl">
<@list items=["e.huisou.com", "huisou.com", "dev.huisou.com"]/>
<@tokenmath.test foo = "myfor" bar = "mybar" baaz = 25*10-100/> 变量的赋值可以是任意正则表
达式
-->
<!--test1-->
<#--<#assign user = "Joe Hider">${user}声明变量,并显示-->
<!--test2-->
<#--
<#import "/WEB-INF/ftl_lib/token_copyright.ftl" as my>
<#assign mail="myother@myother.com">
<@my.copyright date="1999-2002"/> 第一个调用
${my.mail}<br/> 全局变量
${mail} 局部变量,虽然名称都是mail但是Freemarker能区别出来
-->
<!--test3-->
<#--
<#import "/WEB-INF/ftl_lib/token_copyright.ftl" as my>
${my.mail}<br/>
<#assign mail="update hello micro@update test .com" in my>隐藏全局变量(克隆一份),而不是覆盖
, in my只的是token_copyright.ftl文件,mail变量指向克隆过的变量
${my.mail}
-->
<#--
<#list ["loop 1"] as x> ${x}
<#list ["loop 2"] as x> ${x}
<#list ["loop 3"] as x>
${x}
</#list>
${x}
</#list>
${x}
</#list> 内部循环变量隐藏同名的外部循环变量
-->
<#--
<#assign answer=42/>
${answer?string.currency}
${answer?string.percent}
-->