<#assign a=3>
一:if指令:
<#if condition>…
<#elseif condition2>…
<#elseif condition3>…
…<#else>…
</#if>
应用举例:
<#assign a=3>
<#if a>3>
a是一个大于3的数
<#elseif a=3>
a=3
<#else>
a是一个小于3的数
</#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。
===========================
除了相关的文本外,在FreeMarker模板中可以包括下面三种特定部分:
- ${…}:称为插补(interpolations),FreeMarker会在输出时用实际值进行替代。
- 指令:也叫FreeMarker标记,与HTML标记类似,但用#开始(有些以@开始,在后面叙述)。
- 注释:包含在<#– 和 –>(而不是<!–和–>)之间文本。
控制指令
if指令
if指令与大部分程式语言一样,也支持<#else if..>,不再赘述。
<#if animals.python.price < animals.elephant.price> Pythons are cheaper than elephants today.<#else> Pythons are not cheaper than elephants today.</#if>
list指令
list指令将遍历Sequences里的每一个元素。list指令有两个隐含的特殊变量:
- item_index 该变量将返回元素在Sequences里的索引值。
- item_has_next 该变量是boolean型,false表明该元素是Sequences里的最后一个元素。
<p>We have these animals:<table border=1> <tr><th>Id<th>Name<th>Price <#list animals as being> <tr><td>${being_index+1}<td>${being.name}<td>${being.price} Euros </#list></table>
上面的模板可以依次列印出三种动物的名字和价格,being_index和being_has_next则是它的特殊变量。
可以用<#break>指令提前结束list循环。
switch指令
与其他语言的switch语句类似。
<#switch being.size> <#case "small"> This will be processed if it is small <#break> <#case "medium"> This will be processed if it is medium <#break> <#case "large"> This will be processed if it is large <#break> <#default> This will be processed if it is neither</#switch>
<#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> 只能用于macro的定义body中。
capture this
</#local>
十二: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>
<#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> 只能用于macro的定义body中。
capture this
</#local>
十二: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指令对于编写高效、健壮的模板非常重要。通过合理的条件判断、错误预防以及模板的组合使用,可以更好地控制页面的呈现逻辑。在实际开发中,可以参考提供的链接查看具体示例...
### Freemarker 使用总结与详解 #### 一、Freemarker 概述 Freemarker 是一种用于生成动态页面的模板引擎。它不依赖任何 Web 容器,可以在任何 Java 应用程序中使用。Freemarker 的核心优势在于其简单易学且功能...
Freemarker语法总结 Freemarker是一种基于模板的模板引擎,主要用来生成静态 HTML 页面。FreeMarker 模板文件由四个部分组成:文本、注释、插值和 FTL 指令。 一、文本 文本是 Freemarker 模板文件的直接输出部分...
FreeMarker 是一个强大的模板引擎,常...总结来说,FreeMarker 提供了一套强大且灵活的模板语言,通过标签、指令、插值和表达式,能够方便地生成动态内容。理解并熟练掌握这些概念对于构建高效、可维护的模板至关重要。
该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: 上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中. 创建...
本文将全面总结FreeMarker的语法,帮助初学者快速掌握其核心概念。 1. **模板基本结构** - **文本**:模板中的大部分内容是纯文本,会被直接输出。 - **注释**:使用`<#-- ... -->`包裹的内容为注释,不会出现在...
本篇文章将对Freemarker中文手册中的关键语法进行详尽的总结。 ### 1. 基本语法 #### 1.1 变量表达式 `${}` Freemarker中最基本的元素是变量表达式,以`${}`包裹。例如`${name}`会输出变量`name`的值。如果变量不...
1. 模板:模板是FreeMarker的核心,它是HTML或其他文本文件,其中包含特定的FreeMarker指令和变量,这些元素在运行时会被数据模型中的值替换。 2. 数据模型:数据模型是Java对象的集合,它提供模板需要的数据。...
FreeMarker会忽略FTL标签内的空白字符,且`, `/`和指令之间不允许有空格。 ### 插值规则: Freemarker的插值有两种类型: 1. 通用插值 `${expr}`:根据表达式的结果类型转换为相应的输出。 - 字符串值:直接输出...
FreeMarker的核心概念包括模板变量、指令和表达式,它们用于动态生成文本内容。 1. **工具代码**:在Java项目中,我们需要引入FreeMarker库(freemarker.jar)并创建一个FreeMarker配置对象,用来加载模板文件和...
模板是HTML或者其他文本格式的静态部分,其中包含了一些特殊的Freemarker指令,这些指令会根据数据模型来生成动态内容。数据模型则是程序提供给Freemarker的数据结构,它可以是Java对象、集合、Map等,用于填充模板...
- **FreeMarker**内置了多种转义功能,比如HTML转义、XML转义等,可以通过简单的指令实现。 - **Velocity**在这方面的支持较弱,需要开发者自己实现或依赖外部库。 6. **字符处理**: - **FreeMarker**支持更...
总结来说,Freemarker的分页功能实现了在Web应用中高效展示大量数据的需求,通过合理设计后端逻辑和前端模板,可以提供既美观又实用的用户界面。同时,关注性能和安全性的细节,将有助于构建更加健壮的Web应用程序。
总结来说,Freemarker.jar是Java Web开发中一个强大的模板引擎,它与JDK 1.8兼容,能有效地将数据和视图分离开,使前端展示与后端业务解耦。在实际项目中,了解和掌握Freemarker的使用技巧,可以极大地提高开发效率...
2. **代码提示**:自动完成功能可以快速插入常见的FreeMarker指令和变量,减少手动输入时间,提高编码效率。 3. **错误检查**:实时语法错误检测帮助开发者及时发现并修复模板中的问题,避免运行时错误。 4. **格式...
在这个示例中,`${user}`、`${latestProduct.url}`和`${latestProduct.name}`都是FreeMarker的指令,它们将在最终输出时被对应的数据模型中的实际值替换。这样的设计允许设计师专注于页面布局和样式,而程序员则关注...
模板是由纯文本和Freemarker指令组成的文件,这些指令用于动态插入数据。例如,`<#if>`、`<#foreach>`等控制结构,以及`${}`用于输出变量。模板引擎会在运行时解析这些指令,结合提供的数据模型,生成最终的HTML输出...
总结,Freemarker是Java Web开发中用于动态生成HTML的强大工具。了解其数据获取方式和高级特性,能帮助开发者更高效地构建可维护、可扩展的模板代码。通过熟练掌握Freemarker,可以提升web应用的用户体验和开发效率...
模板文件(如"myPage.htm")通常包含Freemarker指令,例如`<#if>`、`<#foreach>`等。在模板中,可以使用`title`和`message`变量,以及`listobjs`列表。例如: ```html ${title} ${message} <li>ID: ${item.id}, ...
例如,在HTML中使用#作为前缀的标签,会将其识别为FreeMarker指令而非HTML标签。 #### 三、FTL标签详解 FreeMarker使用FTL标签来定义其专有的语法结构,这有助于区分模板中的逻辑控制部分与普通的HTML标记。具体来...