`

Freemaker指令总结

 
阅读更多

<#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
: 表达式转换为字符串 
optionsencoding=encodingparse=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_formatdatetime_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 loopvar1loopvar2loopvarN>

<#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_formatdatetime_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 loopvar1loopvar2loopvarN>

<#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>

分享到:
评论

相关推荐

    3freemarker指令1

    总结来说,理解和熟练运用这些Freemarker指令对于编写高效、健壮的模板非常重要。通过合理的条件判断、错误预防以及模板的组合使用,可以更好地控制页面的呈现逻辑。在实际开发中,可以参考提供的链接查看具体示例...

    超强freemarker使用总结,有示例有讲解,可做快速查询手册!!

    ### Freemarker 使用总结与详解 #### 一、Freemarker 概述 Freemarker 是一种用于生成动态页面的模板引擎。它不依赖任何 Web 容器,可以在任何 Java 应用程序中使用。Freemarker 的核心优势在于其简单易学且功能...

    Freemarker语法总结

    Freemarker语法总结 Freemarker是一种基于模板的模板引擎,主要用来生成静态 HTML 页面。FreeMarker 模板文件由四个部分组成:文本、注释、插值和 FTL 指令。 一、文本 文本是 Freemarker 模板文件的直接输出部分...

    FreeMarker标签、指令

    FreeMarker 是一个强大的模板引擎,常...总结来说,FreeMarker 提供了一套强大且灵活的模板语言,通过标签、指令、插值和表达式,能够方便地生成动态内容。理解并熟练掌握这些概念对于构建高效、可维护的模板至关重要。

    freemarker总结

    该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: 上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中. 创建...

    freemarker语法完全总结

    本文将全面总结FreeMarker的语法,帮助初学者快速掌握其核心概念。 1. **模板基本结构** - **文本**:模板中的大部分内容是纯文本,会被直接输出。 - **注释**:使用`&lt;#-- ... --&gt;`包裹的内容为注释,不会出现在...

    freemarker 中文手册 总结 语法

    本篇文章将对Freemarker中文手册中的关键语法进行详尽的总结。 ### 1. 基本语法 #### 1.1 变量表达式 `${}` Freemarker中最基本的元素是变量表达式,以`${}`包裹。例如`${name}`会输出变量`name`的值。如果变量不...

    FreeMarker相关学习文档

    1. 模板:模板是FreeMarker的核心,它是HTML或其他文本文件,其中包含特定的FreeMarker指令和变量,这些元素在运行时会被数据模型中的值替换。 2. 数据模型:数据模型是Java对象的集合,它提供模板需要的数据。...

    Freemarker 教程(总结)

    FreeMarker会忽略FTL标签内的空白字符,且`, `/`和指令之间不允许有空格。 ### 插值规则: Freemarker的插值有两种类型: 1. 通用插值 `${expr}`:根据表达式的结果类型转换为相应的输出。 - 字符串值:直接输出...

    Java 用Freemarker导出word文档总结

    FreeMarker的核心概念包括模板变量、指令和表达式,它们用于动态生成文本内容。 1. **工具代码**:在Java项目中,我们需要引入FreeMarker库(freemarker.jar)并创建一个FreeMarker配置对象,用来加载模板文件和...

    freemarker2.3.23.jar(廉价资源,只求下载量)

    模板是HTML或者其他文本格式的静态部分,其中包含了一些特殊的Freemarker指令,这些指令会根据数据模型来生成动态内容。数据模型则是程序提供给Freemarker的数据结构,它可以是Java对象、集合、Map等,用于填充模板...

    Velocity 和 FreeMarker区别

    - **FreeMarker**内置了多种转义功能,比如HTML转义、XML转义等,可以通过简单的指令实现。 - **Velocity**在这方面的支持较弱,需要开发者自己实现或依赖外部库。 6. **字符处理**: - **FreeMarker**支持更...

    freemarker的分页功能

    总结来说,Freemarker的分页功能实现了在Web应用中高效展示大量数据的需求,通过合理设计后端逻辑和前端模板,可以提供既美观又实用的用户界面。同时,关注性能和安全性的细节,将有助于构建更加健壮的Web应用程序。

    freemarker.jar用于jdk1.8下使用

    总结来说,Freemarker.jar是Java Web开发中一个强大的模板引擎,它与JDK 1.8兼容,能有效地将数据和视图分离开,使前端展示与后端业务解耦。在实际项目中,了解和掌握Freemarker的使用技巧,可以极大地提高开发效率...

    FreeMarker IDE for Eclipse

    2. **代码提示**:自动完成功能可以快速插入常见的FreeMarker指令和变量,减少手动输入时间,提高编码效率。 3. **错误检查**:实时语法错误检测帮助开发者及时发现并修复模板中的问题,避免运行时错误。 4. **格式...

    freemarker概述

    在这个示例中,`${user}`、`${latestProduct.url}`和`${latestProduct.name}`都是FreeMarker的指令,它们将在最终输出时被对应的数据模型中的实际值替换。这样的设计允许设计师专注于页面布局和样式,而程序员则关注...

    Freemarker练习实例

    模板是由纯文本和Freemarker指令组成的文件,这些指令用于动态插入数据。例如,`&lt;#if&gt;`、`&lt;#foreach&gt;`等控制结构,以及`${}`用于输出变量。模板引擎会在运行时解析这些指令,结合提供的数据模型,生成最终的HTML输出...

    freemarker获取数据

    总结,Freemarker是Java Web开发中用于动态生成HTML的强大工具。了解其数据获取方式和高级特性,能帮助开发者更高效地构建可维护、可扩展的模板代码。通过熟练掌握Freemarker,可以提升web应用的用户体验和开发效率...

    freemarker初探 附 freemarker中文手册 与 struts2 checkboxlist的研究

    模板文件(如"myPage.htm")通常包含Freemarker指令,例如`&lt;#if&gt;`、`&lt;#foreach&gt;`等。在模板中,可以使用`title`和`message`变量,以及`listobjs`列表。例如: ```html ${title} ${message} &lt;li&gt;ID: ${item.id}, ...

    FreeMarker模板基本语法

    例如,在HTML中使用#作为前缀的标签,会将其识别为FreeMarker指令而非HTML标签。 #### 三、FTL标签详解 FreeMarker使用FTL标签来定义其专有的语法结构,这有助于区分模板中的逻辑控制部分与普通的HTML标记。具体来...

Global site tag (gtag.js) - Google Analytics