基本的语法都不讲了,网上还是比较多的,下面这些都是从ftl的帮助文档里摘抄,加上自己的翻译和体会
1, ?interpret
能够将文本的值解析为宏,类似动态指令用法如下
<#assign x=["a", "b", "c"]>
<#assign templateSource = "<#list x as y>${y}</#list>">
<#assign inlineTemplate = templateSource?interpret>
<@inlineTemplate />
其中"<#list x as y>${y}</#list>"可以是从数据库中读取出来的文本型指令,方便动态执行指令
2, ?new
模版里创建一个java对象,而不是传入进去的
<#assign word_wrapp = "com.acmee.freemarker.WordWrapperDirective"?new()>
还可以在new的时候加参数,如
<#assign word_wrapp = "com.acmee.freemarker.WordWrapperDirective"?new(40)>
3, !!和??
两个简写符号,可以让我偷电缆(偷点懒)
${obj.name!!} = ${obj.name?default('')}
<#if obj?? > = <#if obj?exists>
单独一个"!"是什么意思? 相当于default,即有下面的写法
${item.name?default("no name")}
等于
${item.name!"no name"}
甚至可以组合起来判断某个值为空时,显示另一个的值,如
${item.name!(item.title!!)}
4, ; in macro 和 nest的参数
我原本以为<#nest/>不能加参数,在构造模板时费了一些劲,后来才发现是可以用";"在引用macro时给nest传参数
5, include里的通配符*
好像可以应对不固定文件夹层级路径的写法,但具体没用过
<#include "*/footer.ftl">
匹配如下
/foo/bar/footer.ftl
/foo/footer.ftl
/footer.ftl
按从上到下,最先匹配的最先导入。
转贴请注明出处.http://lazy.iteye.com
1, ?interpret
能够将文本的值解析为宏,类似动态指令用法如下
<#assign x=["a", "b", "c"]>
<#assign templateSource = "<#list x as y>${y}</#list>">
<#assign inlineTemplate = templateSource?interpret>
<@inlineTemplate />
其中"<#list x as y>${y}</#list>"可以是从数据库中读取出来的文本型指令,方便动态执行指令
2, ?new
模版里创建一个java对象,而不是传入进去的
<#assign word_wrapp = "com.acmee.freemarker.WordWrapperDirective"?new()>
还可以在new的时候加参数,如
<#assign word_wrapp = "com.acmee.freemarker.WordWrapperDirective"?new(40)>
3, !!和??
两个简写符号,可以让我偷电缆(偷点懒)
${obj.name!!} = ${obj.name?default('')}
<#if obj?? > = <#if obj?exists>
单独一个"!"是什么意思? 相当于default,即有下面的写法
${item.name?default("no name")}
等于
${item.name!"no name"}
甚至可以组合起来判断某个值为空时,显示另一个的值,如
${item.name!(item.title!!)}
4, ; in macro 和 nest的参数
我原本以为<#nest/>不能加参数,在构造模板时费了一些劲,后来才发现是可以用";"在引用macro时给nest传参数
<@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
<@repeat count=4 ; c, halfc>
${c}. ${halfc}
</@repeat>
<@repeat count=4>
Just repeat it...
</@repeat>
5, include里的通配符*
好像可以应对不固定文件夹层级路径的写法,但具体没用过
<#include "*/footer.ftl">
匹配如下
/foo/bar/footer.ftl
/foo/footer.ftl
/footer.ftl
按从上到下,最先匹配的最先导入。
转贴请注明出处.http://lazy.iteye.com