`
huibin
  • 浏览: 750630 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

freemarker教程基本指令介绍

阅读更多

一: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。

===========================

除了相关的文本外,在FreeMarker模板中可以包括下面三种特定部分:

  1. ${…}:称为插补(interpolations),FreeMarker会在输出时用实际值进行替代。
  2. 指令:也叫FreeMarker标记,与HTML标记类似,但用#开始(有些以@开始,在后面叙述)。
  3. 注释:包含在<#– 和 –>(而不是<!–和–>)之间文本。
控制指令
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指令有两个隐含的特殊变量:

  1. item_index 该变量将返回元素在Sequences里的索引值。
  2. 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=value2paramN=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=value2paramN=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教程+中文版.pdf”这份文档中,你将会详细了解到如何配置和初始化Freemarker,如何创建和解析模板,以及如何处理模板错误。教程还会深入讲解Freemarker的高级特性,如宏、指令、模板继承和布局等,...

    FreeMarker教程pdf版

    ### FreeMarker教程精要 **FreeMarker** 是一种强大的模板引擎,主要用于生成动态网页或用于任何文本输出场景。本文档将深入探讨FreeMarker的核心组成部分及其使用方法,包括文本、注释、插值以及FTL(FreeMarker ...

    非常好的Freemarker中文教程

    从提供的文件名"FreeMarkerl_zh_CN.pdf"来看,这应该是一份中文版的Freemarker教程文档,对于中文使用者来说,阅读和学习起来会更加方便。通过详细研读这份教程,开发者不仅可以掌握Freemarker的基本使用,还能深入...

    Freemarker教程及jar包

    `Freemarker教程 中文版.pdf`是一份详细的中文教程,将指导你掌握以下关键知识点: 1. **模板设计模式**:了解如何定义模板的结构,包括基本的文本、注释、变量和表达式。 2. **控制结构**:学习如何使用条件语句...

    FreeMarker实例教程,手把手教你FreeMarker的方方面面

    ### FreeMarker实例教程知识点详解 ...以上知识点覆盖了FreeMarker的主要方面,通过本教程的学习,读者不仅能够掌握FreeMarker的基本使用方法,还能够深入了解其高级特性,为日后解决复杂的Web开发问题打下坚实的基础。

    Freemarker2.3.16_带简单教程

    《Freemarker教程 中文版.pdf》是一个专门的教程,它可能包含以下内容: 1. **入门指南**:解释如何安装Freemarker,以及在Java项目中集成它的基本步骤。 2. **实例分析**:通过实际示例演示如何创建和使用模板,...

    FreeMarker教程中文版

    这个“FreeMarker教程中文版”提供了全面的学习资源,帮助开发者深入理解和应用FreeMarker。 FreeMarker的核心概念是模板和数据模型。模板是HTML或其他文本文件,其中包含一些特定的FreeMarker指令,用于动态插入由...

    freemarker教程下载

    1. **Freemarker基本概念** - **模板语言**:Freemarker使用模板语言来描述动态内容的结构和样式,与HTML类似但不完全相同,允许插入变量和控制结构。 - **数据模型**:Freemarker与后台程序通过数据模型交互,将...

    Freemarker 教程

    3. **教程手册**:《Freemarker教程手册中文版》是学习Freemarker的重要参考资料,涵盖了从入门到进阶的全面内容。 通过这个教程,你可以系统地了解和掌握Freemarker的使用方法,提升你的Web开发技能。在实践中不断...

    FreeMarker 中文教程 用于 FreeMarker 2.3.19

    - **指令**:介绍了 FreeMarker 中的各种指令,如 `#if`、`#foreach` 等,并解释了它们的功能。 - **表达式**:讲解了如何在模板中使用表达式来引用数据模型中的数据或调用方法。 - **插值**:说明了如何在模板...

    Freemarker教程+中文版

    总之,FreeMarker教程+中文版是一个全面的学习资源,涵盖了从基础到高级的所有主题,适合初学者和经验丰富的开发者。通过学习,你可以掌握如何有效地使用FreeMarker构建动态、高效的Web应用界面。

    Freemarker教程 中文版

    ### Freemarker教程中文版知识点详解 #### 一、FreeMarker简介 - **定位与功能**:FreeMarker是一款基于模板的文本生成工具,主要用于生成各类文本输出,如HTML、XML、RTF、Java源代码等。它由纯Java编写,因此可以...

    freemarker教程

    3. 控制结构:除了基本的条件语句和循环,Freemarker还有`&lt;#nested&gt;`用于嵌套模板,`&lt;#tolog&gt;`打印调试信息,以及`&lt;#function&gt;`定义自定义函数。 三、Freemarker进阶 1. 自定义指令:通过继承`...

    FreeMarker教程

    XML处理指南部分是FreeMarker教程手册的重点之一,它涵盖了如何处理XML文档。这部分内容包括了如何将XML文档整合到数据模型中、学习必要的XML处理方法,以及更高级的XML处理技巧。 最后,在参考文档部分,详细列出...

    Java模板引擎Freemarker教程.docx

    ### Java模板引擎Freemarker教程知识点详解 #### 一、FreeMarker概述 FreeMarker是一个用于生成输出文本的模板引擎,其应用广泛,特别是在Java应用程序中作为视图层的一部分。它支持多种类型的输出文本,包括HTML、...

    FreeMarker教程+快速入门

    本教程旨在帮助初学者快速掌握FreeMarker的基本概念和使用方法,通过详实的讲解与实例相结合的方式,让你能够轻松上手。 1. **FreeMarker基础** - **定义**:FreeMarker是一个Java模板语言,它将数据模型与视图...

    freeMarker 教程 word版本的 很适合初学者

    本教程针对初学者,将深入介绍FreeMarker的核心概念、配置、语法以及实际应用。 1. **核心概念** - **模板**: FreeMarker的核心是模板,它是HTML、XML或任何其他文本格式的文件,其中包含了动态数据占位符。 - **...

    freemarker 2.3.18 中文手册

    10. **逻辑运算和比较**:Freemarker支持基本的逻辑运算符(`&&`、`||`、`!`)和比较运算符(`=`, `!=`, `, `&gt;`, `, `&gt;=`),以及`in`关键字用于检查成员关系。 11. **模板继承与布局**:通过`...

Global site tag (gtag.js) - Google Analytics