Freemarker学习记录

本文档记录了Freemarker模板语言的一些关键特性与用法,包括变量处理、条件判断、宏定义及调用等内容,并提供了实例说明。

学习Freemarker,把其中比较容易忘记的点记录下:


<h1>Welcome ${user!"Anonymous"}!</h1>
当user从数据模型中丢失或为空时,模板将会将user的值表示为字符串"Anonymous"。


<#if user??><h1>Welcome ${user}!</h1></#if>
变量名后面通过放置??来询问 FreeMarker 一个变量是否存在。


(animals.python.price)!0。这种情况下当animals或python不存在时表达式的结果仍然是0。对于??也是同样用来的处理这种逻辑的:可以animals.python.price??对比(animals.python.price)??来看。

原生字符串
${r"${foo}"}         结果${foo} 
${r"C:\foo\bar"}   结果C:\foo\bar

使用>=和>的时候有一点小问题。FreeMarker 解释>的时候可以把它当作 FTL 标签的结束符。为了避免这种问题,不得不将表达式放到括号内:<#if (x > y)>,或者可以在比较关系处使用&gt;和&lt;:<#if x &gt; y>。

模板语言中没有 null这个概念。比如有一个 bean,bean 中有一个 maidenName属性,对于模板而言(假设你没有配置FreeMarker 来使用一些极端的对象包装),这个属性的值是 null,和不存在这个属性的情况是一致的。

一个常犯的错误是在不能使用插值的地方使用了它。典型的错误就是<#if ${isBig}>Wow!</#if>,这是语法上的错误。只要写为<#if isBig>Wow!</#if>就对了,而且<#if "${isBig}">Wow!</#if>也是错误的,因为这样参数就是字符串类型了,但是 if 指令的参数要求是布尔值,所以运行时就会发生错误。


<#macro greet person> 
  <font size="+2">Hello ${person}!</font> 
</#macro>
那么就可以这样来使用这个宏
<@greet person="Fred"/> and <@greet person="Batman"/>
这和 HTML 的语法是很相似的,它会打印出:
<font size="+2">Hello Fred!</font> and <font size="+2">Hello Batman!</font>
自定义指令可以有多个参数。如下所示,再添加一个新的参数 color: 
<#macro greet person color> 
  <font size="+2" color="${color}">Hello ${person}!</font> 
</#macro>

那么,这个宏就可以这样来使用( 参数的顺序不重要):<@greet person="Fred" color="black"/>


<#macro do_thrice> 
  <#nested 1> 
  <#nested 2> 
  <#nested 3> 
</#macro> 
<@do_thrice ; x> <#-- 用户自定义指令 使用";"代替"as" --> 
  ${x} Anything. 
</@do_thrice>
将会输出:
1 Anything. 
2 Anything. 
3 Anything.


使用另一个模板文件中定义的宏,import 指令来代替 include
定义:

<#macro copyright date> 
  <p>Copyright (C) ${date} Julia Smith. All rights reserved.</p> 
</#macro> 
<#assign mail = "jsmith@acme.com">
使用:
<#import "/lib/my_test.ftl" as my>  
<#-- 被称为"my"的哈希表就会是那个"大门" --> 
<@my.copyright date="1999-2002"/> 
${my.mail}
要注意它是怎么访问为 lib/my_test.ftl 创建的命名空间中的变量的,通过新创建的哈希表,my。那么将会打印出:
<p>Copyright (C) 1999-2002 Julia Smith. All rights reserved.</p> 
jsmith@acme.com 
如果在主命名空间中有一个变量,名为 mail 或 copyright,那么就不会引起混乱了,因为两个模 板使用了不同 的命名空间 。



转载于:https://my.oschina.net/u/3359/blog/158726

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值