IT教程 | 加入收藏 | 简体 | 繁体
GUI编程:Java基础StrutsSpringHibernateIbatis框架整合GUI编程Ejb分布式开发
当前位置: 首页 > Java教程 > GUI编程

FreeMarker高级实例教程讲解

2015-03-26来源:[www.121ask.com]热度:0℃ 【字体:

FreeMarker高级实例教程讲解:
高级部分
 
用户定义指令
 
1.       宏的使用
宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量,下面是一个例子:
1)宏的指令是macro
<#macro greet>
  <font>Hello Joe!</font>
</#macro> 
作为用户定义指令使用宏变量时,使用@替代FTL标记中的#
<@greet></@greet>
 
greet是我们定义的宏的名称,如上例使用这个宏的时候就用这个名字来进行调用。
如果没有主体内容,也可以使用:<@greet/>
 
2)带参数的宏指令
在macro指令中可以在宏变量之后定义参数,如:
<#macro greet person>
  <font>Hello ${person}!</font>
</#macro>
可以这样使用这个宏变量:
<@greet person="Fred"/> and <@greet person="Batman"/>
输出结果是:
  <font>Hello Fred!</font> and <font>Hello Batman!</font>
 
greet是我们定义的宏名称,person是我们定义的参数,调用时通过person="Fred"为该参数付值。
 
注意:
宏的参数可以有多个并且不仅可以是字符串,还可以是其它类型,甚至是复杂的表达式。
 其中参数的次序是无关的。
只能使用在macro指令中定义的参数,并且对所有参数赋值。
可以在定义参数时指定缺省值。
宏的参数是局部变量,只能在宏定义中有效。
 
例子:
<#macro greet person color>
  <font color="${color}">Hello ${person}!</font>
</#macro>
 
 
 
<@greet person="Fred" color="black"/>
<@greet color="black" person="Fred"/>
因为参数的次序是无关的所以这两个调用等价。
<@greet person="Fred" color="black" background="green"/>
<@greet person="Fred"/>
因为必须使用定义的参数和对所有参数付值所以这两个调用是错误的
但是如果
<#macro greet person color="black">
  <font size="+2" color="${color}">Hello ${person}!</font>
</#macro>
给color设置的默认值black所以<@greet person="Fred"/>调用是正确的了。
 
 
3).嵌套内容
用户定义指令可以有嵌套内容,使用<#nested>指令执行指令开始和结束标记之间的模板片断
例子:
<#macro border>
  <table border=4 cellspacing=0 cellpadding=4><tr><td>
    <#nested>
  </tr></td></table>
</#macro> 
这样使用该宏变量:
<@border>The bordered text</@border>
输出结果:
  <table border=4 cellspacing=0 cellpadding=4><tr><td>
    The bordered text
  </tr></td></table>
 
<#nested>指令可以被多次调用,例如:
<#macro do_thrice>
  <#nested>
  <#nested>
  <#nested>
</#macro>
<@do_thrice>
  Anything.
</@do_thrice> 
输出结果:
  Anything.
  Anything.
  Anything.
 
 
嵌套内容也可以是有效的FTL
<@border>
  <ul>
  <@do_thrice>
    <li><@greet person="Joe"/>
  </@do_thrice>
  </ul>
</@border>
输出结果:
 <table border=4 cellspacing=0 cellpadding=4>
       <tr><td>
    <ul>
    <li><font>Hello Joe!</font>
    <li><font>Hello Joe!</font>
    <li><font>Hello Joe!</font>
      </ul>
  </tr></td>
</table>
 
4).在宏定义中使用循环变量
 
    用户定义指令可以有循环变量,通常用于重复嵌套内容,基本用法是:作为nested指令的参数传递循环变量的实际值,而在调用用户定义指令时,在<@…>开始标记的参数后面指定循环变量的名字
例子:
<#macro repeat count>
  <#list 1..count as x>
    <#nested x, x/2, x==count>
  </#list>
</#macro>
<@repeat count=4 ; c, halfc, last>
  ${c}. ${halfc}<#if last> Last!</#if>
</@repeat> 
输出结果:
  1. 0.5
  2. 1
  3. 1.5
  4. 2 Last!
 
指定的循环变量的数目和用户定义指令开始标记指定的不同不会有问题
调用时少指定循环变量,则多指定的值不可见
调用时多指定循环变量,多余的循环变量不会被创建

以上IT文章《FreeMarker高级实例教程讲解》由名客技术网[www.121ask.com]提供阅读!
名客技术网是一个免费为广大IT技术人员提供IT教程,绿色软件,asp/php/jsp/java/net等实例视频教程,CMS教程,破解软件下载以及学习相关源码、知识的IT网站。
名客技术网如果无意之中侵犯了您的版权,请来电告知,本站将在3个工作日内删除 QQ:175352796
Copyright 2011-2017 Powered by 121ASK.COM, All Rights Reserved.
备案号:鄂ICP备11013833号-1