一:if指令:
<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
...
<#else>
...
</#if>
二:switch
<#switch value>
<#case refValue1>
...
<#break>
<#case refValue2>
...
<#break>
...
<#case refValueN>
...
<#break>
<#default>
...
</#switch>
三:list,break
<#list sequence as item>
...
</#list>
两个特殊的循环变量:
item_index: 当前变量的索引值。
item_has_next: 是否存在下一个对象。
可以用<#break/>指令离开loop循环。
四:include指令
<#include filename>
或者
<#include filenameoptions>
filename: 表达式转换为字符串
options: encoding=encoding, parse=parse
encoding: 表达式转换为字符串
parse: 表达式转换为逻辑值,是否作为ftl文件解析。
<#include "/common/navbar.html" parse=false encoding="Shift_JIS">
<#include "*/footer.ftl">表示当前目录下以及所有父目录下的文件。
如果当前模版在/foo/bar/template.ftl ,那么查找footer.ftl的顺序为:
/foo/bar/footer.ftl
/foo/footer.ftl
/footer.ftl
这种方式讲允许设计者将通用的模版放在父文件夹里面。
也可以只指定部分路径:<#include "*/commons/footer.ftl">
五:import指令
<#import path as hash>
六:noparse
<#noparse>
...
</#noparse>
七:compress
<#compress>
...
</#compress>
八:escape,noescape
<#escape identifier as expression>
...
<#noescape>...</#noescape>
...
</#escape>
escape指令body区的ftl的interpolations都会被自动加上escape表达式。但是不会影响字符串内的interpolations。而且也只会影响到body内出现的interpolations,比如不会影响到include的ftl的interpolations。
<#escape x as x?html>
First name: ${firstName}
Last name: ${lastName}
Maiden name: ${maidenName}
</#escape>
等同于:
First name: ${firstName?html}
Last name: ${lastName?html}
Maiden name: ${maidenName?html}
escape指令在解析模版时起作用,而不是运行时起作用。
escape指令还能嵌套使用,子继承父的escape规则。
<#escape x as x?html>
Customer Name: ${customerName}
Items to ship:
<#escape x as itemCodeToNameMap[x]>
${itemCode1}
${itemCode2}
${itemCode3}
${itemCode4}
</#escape>
</#escape>
等同于:
Customer Name: ${customerName?html}
Items to ship:
${itemCodeToNameMap[itemCode1]?html}
${itemCodeToNameMap[itemCode2]?html}
${itemCodeToNameMap[itemCode3]?html}
${itemCodeToNameMap[itemCode4]?html}
九:assign指令
<#assign name=value>
or
<#assign name1=value1name2=value2... nameN=valueN>
or
<#assign same as above... in namespacehash>
or
<#assign name>
capture this
</#assign>
or
<#assign name in namespacehash>
capture this
</#assign>
创建或者替换一个已经存在的变量,只能作用于顶层变量。
不好的做法:<#assign x>Hello ${user}!</#assign>
更改为:<#assign x="Hello ${user}!">
十:global指令
<#global name=value>
or
<#global name1=value1name2=value2... nameN=valueN>
or
<#global name>
capture this
</#global>
十一:local指令
<#local name=value>
or
<#local name1=value1name2=value2... nameN=valueN>
or
<#local name>
capture this
</#local>
只能用于macro的定义body中。
十二:setting指令:
<#setting name=value>
name的取值范围:
local:
number_format:
boolean_format:缺省值为"true,false"
date_format, time_format, datetime_format
time_zone:
url_escaping_charset
classic_compatible
十三:用户自定义指令
<@macro_or_transfparam1=val1param2=val2...paramN=valN/><@macro_or_transfparam1=val1param2=val2...paramN=valN ; lv1, lv2, ..., lvN/><@macro_or_transf...>
...
</@macro_or_transf>
<@macro_or_transf...>
...
</@><@macro_or_transfval1, val2, ..., valN/>
十四:macro,nested,return
<#macro nameparam1param2... paramN>
...
<#nested loopvar1, loopvar2, ..., loopvarN>
...
<#return>
...
</#macro>
十五:function, return
<#function nameparam1param2... paramN>
... <#return returnValue>
...
</#function>
<#function avg x y>
<#return (x + y) / 2>
</#function>
${avg(10, 20)}
十六:flush
<#flush>
十七:stop
<#stop>
or
<#stop reason>
取消处理模版。
十八:ftl指令
<#ftl param1=value1param2=value2...paramN=valueN>
ftl指令必须放在ftl文件的最上面。
参数范围:
encoding:
strip_whitespace
strip_text
strict_syntax
十九:t, lt, rt
二十:attempt, recover
<#attempt>
attempt block
<#recover>
recover block
</#attempt>
<#attempt>
Optional content: ${thisMayFails}
<#recover>
Ops! The optional content is not available.
</#attempt>
分享到:
相关推荐
本学习笔记将深入探讨FreeMarker的核心概念、语法特性以及在实际项目中的应用。 1. **FreeMarker基本概念** - **模板**: FreeMarker的工作核心是模板,它是HTML或XML文档,其中嵌入了特定的FreeMarker指令和变量。...
6. **学习笔记** - **入门**:从简单的变量输出开始,逐步了解FreeMarker的基本语法。 - **进阶**:掌握控制结构和逻辑,以及如何与Java对象交互。 - **实践**:通过实际项目应用,提升解决实际问题的能力。 - *...
- `Freemaker_入门+深入+开发指南+学习笔记.doc`:这份文档提供了从基础到高级的Freemarker学习路径,包括基本语法、模板设计原则和实践案例。 - `freemaeker全面教程.doc`:这份教程全面覆盖了Freemarker的各个...
1. `freemarker学习笔记.doc`:这可能是一份详细的FreeMarker学习文档,涵盖了FreeMarker的基础知识和高级特性。 2. `FullFieldTag.java`、`FullFieldCheckboxTag.java`:这两个文件可能是自定义的FreeMarker标签...
通过阅读`freemarker语法.docx`和`freemarker笔记1.txt`,你可以更深入地了解这些规则,并结合实际项目进一步掌握Freemarker的使用。同时,参考提供的博客链接(https://kingpingping.iteye.com/blog/1144477),...
最后,基础语法的文本文件《Freemarker基础语法.txt》和《Freemarker学习归纳 .txt》是对Freemarker核心语法的精炼总结,方便初学者快速入门。这些文件可能包括变量、表达式、控制流、注释等基本元素,是学习...
1. **Freemaker_入门+深入+开发指南+学习笔记.doc**:这份文档通常包含了Freemarker的基础概念、快速入门教程、进阶技巧以及开发实践指导。通过阅读,我们可以了解到如何创建模板、变量的使用、控制结构(如if/else...
"freemaker学习笔记"很可能是对Freemarker语法和使用技巧的详细讲解,包括但不限于变量、指令、函数、宏定义、模板继承和导入等。这些笔记对于初学者来说是宝贵的参考资料,能帮助快速掌握Freemarker的基本用法。 ...
崔希凡的JavaWeb28天笔记是一份深入学习Java Web开发的重要资源,它涵盖了从基础到高级的各种主题,旨在帮助开发者在短短的28天内掌握Java Web的核心技术。这份笔记由传智播客的黑马程序员崔希凡编写,以其丰富的...