Freemarker学习记录

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


<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)??来看。 shell

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

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

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

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


<#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"/> xml


<#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,那么就不会引发混乱了,由于两个模 板使用了不一样 的命名空间 。
相关文章
相关标签/搜索