`
fred2005
  • 浏览: 26810 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Freemarker指令

    博客分类:
  • java
阅读更多

一: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
: 表达式转换为字符串
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。

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

分享到:
评论

相关推荐

    3freemarker指令1

    以下是对`3freemarker指令1`中涉及知识点的详细说明: 1. **ftl的if/else判断语句**: 在Freemarker模板语言中,`if`和`else`指令用于条件判断。基本语法如下: ```freemarker &lt;!-- 当expression为真时执行的...

    FreeMarker常用指令

    FreeMarker 常用指令详解 FreeMarker 的 FTL 指令是模板的重要组成部分,这些指令可以实现对数据模型所包含数据的遍历、分支控制。除此之外,还有一些重要的功能,也是通过 FTL 指令来实现的。下面我们将详细介绍...

    freemarker格式化缩进文本或include指令

    要实现这个功能,开发者通常需要自定义一个FreeMarker指令或使用已有的扩展库。例如,`FormatDirective.java`可能就是一个实现了自定义格式化的指令。在自定义指令中,你可以根据需要处理模板输出的文本,添加适当的...

    FreeMarker指令学习

    本篇文章将深入讲解FreeMarker的指令学习,包括其基本概念、主要指令以及实际应用。 一、FreeMarker的基本概念 1. 模板:FreeMarker的工作核心是模板,模板是一份HTML或XML文件,其中包含静态文本和FreeMarker...

    FreeMarker

    3. **指令**:FreeMarker 指令是以 `#` 开头的特殊标签,它们可以执行特定的任务,如`&lt;#assign&gt;`分配变量,`&lt;#include&gt;`引入其他模板,`&lt;#function&gt;`定义函数等。例如,`&lt;#assign name="John"&gt;` 将变量 `name` 设置...

    FreeMarker中文文档.pdf下载

    这段代码展示了如何在HTML页面中嵌入FreeMarker指令和表达式来显示动态内容。其中`&lt;#list&gt;`指令用于遍历一个名为`animals`的列表,并输出每个动物的名字和价格。 通过以上内容,我们可以看到FreeMarker作为一种强大...

    FreeMarker手册.pdf

    模板文件通常以`.ftl`为扩展名,其中包含静态文本和FreeMarker指令。 2. **数据模型**:FreeMarker从应用程序中获取数据,这些数据构成了模板渲染时的上下文。数据模型可以是Java对象、集合、Map等,它们通过模板...

    通过freemarker模板 生成PDF

    1. **创建Freemarker模板**:编写一个`.ftl`文件,包含HTML和Freemarker指令。 2. **准备数据模型**:在Java代码中,创建一个对象或Map,包含将要填充到模板中的数据。 3. **处理模板**:使用Freemarker API的`...

    freemarker语法

    如果使用#{}格式,FreeMarker将不会解析该插值部分,这在处理数据模型中键与FreeMarker指令同名时非常有用。 FTL(FreeMarker Template Language)指令是FreeMarker模板的控制部分,它们类似于HTML标签,但必须以#...

    FreeMarker生成word文件

    8. **模板设计**:`如何利用FreeMarker能让Java生成复杂Word文档.doc`可能是一个示例模板,展示了如何在Word文档中嵌入FreeMarker指令。通过阅读这个文档,可以学习如何设计模板,以及FreeMarker指令在Word文档中的...

    freemarker

    3. **Freemarker指令(Directives)**:这些是控制流程或结构的特殊标记,如`&lt;#if&gt;`、`&lt;#foreach&gt;`、`&lt;#assign&gt;`等。它们允许你在模板中进行条件判断、循环和变量赋值。 4. **内置函数(Built-in Functions)**:...

    FreeMarker相关学习文档

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

    FreeMarker+中文手册

    1. **模板(Template)**:模板是FreeMarker的基石,它是HTML或其他格式的文件,其中包含了FreeMarker指令和变量。这些指令和变量在运行时会被替换为实际的数据。 2. **数据模型(Data Model)**:数据模型是应用...

    freemarker-ide插件

    2. **代码提示**:在编写`.ftl`文件时,插件会提供自动补全功能,帮助快速输入常见的Freemarker指令和变量,减少手动输入的时间。 3. **错误检查**:插件会在编写过程中实时检查代码,标出可能存在的语法错误或逻辑...

    FreeMarker_2.3.23 中文

    例如,`&lt;#if user.isAdmin&gt;` 和 `${user.name}` 是常见的FreeMarker指令和变量表达式。 2. **数据模型**:这是FreeMarker渲染模板时所用到的数据,通常由应用程序提供。它可以是Java对象、Map、List等,用于填充...

    Eclipse freemarker插件

    2. **代码提示和自动完成**:在编写模板时,插件可以提供代码补全功能,帮助开发者快速输入常用的Freemarker指令和变量,减少手动输入的时间和错误。 3. **代码折叠**:对于复杂的模板,插件支持代码折叠,使得...

    freemarker中文手册.pdf

    - **模板内容**:示例中使用`${...}`包裹的占位符作为FreeMarker指令,将在渲染时被相应的数据替换。 - **数据模型**:定义了一个包含用户名称和最新产品的数据模型,该模型由开发者创建并通过FreeMarker传递给...

    Freemarker-2.3.19中文手册和jar包

    2. **创建模板**: 模板文件通常以`.ftl`扩展名,可以包含文本和Freemarker指令。例如,一个简单的模板可能包含`Hello, ${name}!`,其中`name`是来自数据模型的值。 3. **构建数据模型**: 在Java代码中,创建一个Map...

    freemarker java模板技术 很详细的注释

    - **模板**: 模板是Freemarker的核心,它是HTML或其他文本格式的静态部分,其中包含了一些特殊的Freemarker指令,用于在运行时与Java数据模型交互。 - **数据模型**: Java应用程序会创建一个数据模型,将数据传递...

    freeMarker学习入门

    模板是包含FreeMarker指令的文件,这些指令通常以`${...}`形式出现,用于在生成最终输出时被数据模型中的实际值替换。例如,以下模板展示了如何将用户名和最新产品的信息插入到HTML中: ```html &lt;title&gt;Welcome!...

Global site tag (gtag.js) - Google Analytics