`
liuguofeng
  • 浏览: 449612 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

FreeMarker模板文件的组成及基本语法详解(一)

阅读更多
本文主要介绍了FreeMarker模板文件有几部分组成?以及FreeMarker的一些基本语法知识.

FreeMarker模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:

1. 文本:直接输出的部分
2. 注释:<#-- ... -->格式部分,不会输出
3. 插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出
4. FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出

下面是一个FreeMarker模板的例子,包含了以上所说的4个部分
<html><br>
<head><br>
<title>Welcome!</title><br>
</head><br>
<body><br>
<#-- 注释部分 --><br>
<#-- 下面使用插值 -->
<h1>Welcome ${user} !</h1><br>
<p>We have these animals:<br>
<u1><br>
<#-- 使用FTL指令 -->
<#list animals as being><br>
   <li>${being.name} for ${being.price} Euros<br>
<#list><br>
<u1><br>
</body><br>
</html>

1. FTL指令规则

在FreeMarker中,使用FTL标签来使用指令,FreeMarker有3种FTL标签,这和HTML标签是完全类似的.
1,开始标签:<#directivename parameter>
2,结束标签:</#directivename>
3,空标签:<#directivename parameter/>

实际上,使用标签时前面的符号#也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改成@符号.
使用FTL标签时,应该有正确的嵌套,而不是交叉使用,这和XML标签的用法完全一样.如果全用不存在的指令,FreeMarker不会使用模板输出,而是产生一个错误消息.FreeMarker会忽略FTL标签中的空白字符.值得注意的是< , /> 和指令之间不允许有空白字符.

2.插值规则

FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}

2.1 通用插值

对于通用插值,又可以分为以下4种情况:
1,插值结果为字符串值:直接输出表达式结果
2,插值结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
<#settion number_format="currency"/>
<#assign answer=42/>
${answer}
${answer?string} <#-- the same as ${answer} -->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
${answer}
输出结果是:
$42.00
$42.00
42
$42.00
4,200%
3,插值结果为日期值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
${lastUpdated?string("EEE, MMM d, ''yy")}
${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")}
输出结果是:
2008-04-08 08:08:08 Pacific Daylight Time
Tue, Apr 8, '03
Tuesday, April 08, 2003, 08:08:08 PM (PDT)
4,插值结果为布尔值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
<#assign foo=true/>
${foo?string("yes", "no")}
输出结果是:
yes

2.2 数字格式化插值

数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是:
mX:小数部分最小X位
MX:小数部分最大X位
如下面的例子:
<#assign x=2.582/>
<#assign y=4/>
#{x; M2} <#-- 输出2.58 -->
#{y; M2} <#-- 输出4 -->
#{x; m2} <#-- 输出2.6 -->
#{y; m2} <#-- 输出4.0 -->
#{x; m1M2} <#-- 输出2.58 -->
#{x; m1M2} <#-- 输出4.0 -->

3, 表达式

表达式是FreeMarker模板的核心功能,表达式放置在插值语法${}之中时,表明需要输出表达式的值;表达式语法也可与FreeMarker标签结合,用于控制输出.实际上FreeMarker的表达式功能非常强大,它不仅支持直接指定值,输出变量值,也支持字符串格式化输出和集合访问等功能.

3.1 直接指定值

使用直接指定值语法让FreeMarker直接输出插值中的值,而不是输出变量值.直接指定值可以是字符串,数值,布尔值,集合和MAP对象.

1,字符串
直接指定字符串值使用单引号或双引号限定,如果字符串值中包含特殊字符需要转义,看下面的例子:
${"我的文件保存在C:\\盘"}
${'我名字是\"annlee\"'}
输出结果是:
我的文件保存在C:\盘
我名字是"annlee"

FreeMarker支持如下转义字符:
\";双引号(u0022)
\';单引号(u0027)
\\;反斜杠(u005C)
\n;换行(u000A)
\r;回车(u000D)
\t;Tab(u0009)
\b;退格键(u0008)
\f;Form feed(u000C)
\l;<
\g;>
\a;&
\{;{
\xCode;直接通过4位的16进制数来指定Unicode码,输出该unicode码对应的字符.

如果某段文本中包含大量的特殊符号,FreeMarker提供了另一种特殊格式:可以在指定字符串内容的引号前增加r标记,在r标记后的文件将会直接输出.看如下代码:
${r"${foo}"}
${r"C:\foo\bar"}
输出结果是:
${foo}
C:\foo\bar

2,数值
表达式中的数值直接输出,不需要引号.小数点使用"."分隔,不能使用分组","符号.FreeMarker目前还不支持科学计数法,所以"1E3"是错误的.在FreeMarker表达式中使用数值需要注意以下几点:
1,数值不能省略小数点前面的0,所以".5"是错误的写法
2,数值8 , +8 , 8.00都是相同的

3,布尔值
直接使用true和false,不使用引号.

4,集合
集合以方括号包括,各集合元素之间以英文逗号","分隔,看如下的例子:
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
${x}
</#list>
输出结果是:
星期一
星期二
星期三
星期四
星期五
星期六
星期天

除此之外,集合元素也可以是表达式,例子如下:
[2 + 2, [1, 2, 3, 4], "whatnot"]

还可以使用数字范围定义数字集合,如2..5等同于[2, 3, 4, 5],但是更有效率.注意,使用数字范围来定义集合时无需使用方括号,数字范围也支持反递增的数字范围,如5..2

5,Map对象
Map对象使用花括号包括,Map中的key-value对之间以英文冒号":"分隔,多组key-value对之间以英文逗号","分隔.下面是一个例子:
{"语文":78, "数学":80}
Map对象的key和value都是表达式,但是key必须是字符串
分享到:
评论

相关推荐

    FreeMarker模板基本语法

    ### FreeMarker模板基本语法 #### 一、FreeMarker概述与基本用法 **FreeMarker**是一种强大的、基于Java的模板引擎,主要用于动态生成HTML页面,但也支持其他类型的文本格式(如XML、JavaScript、电子邮件等)。它...

    freemarker(FTL)常见语法大全

    ### Freemarker(FTL)常见语法详解 Freemarker是一种基于模板引擎技术的软件,用于生成文本输出。它被广泛应用于Web开发中,用来生成HTML页面或其他格式的文档。Freemarker使用简单直观的语法,使得开发者能够轻松...

    freemarker语法完整版

    ### Freemarker语法完整版知识点详解 #### A. 概念 **1. Scalars(标量)** - **字符串**: 由单引号或双引号括起来的文本。 - **数字**: 直接使用数值。 - **日期**: 通常从数据模型中获取。 - **布尔值**: `...

    freemarker语法.pdf

    #### 一、FreeMarker模板文件组成 FreeMarker模板文件与普通的HTML页面相比,并不显得更为复杂。其主要组成部分包括: 1. **文本**:这部分内容会被直接输出到最终生成的文档中。 2. **注释**:以`&lt;#----&gt;`这种...

    freemarker详解

    2. **基本语法** - **变量引用**: `${variable}` 用于输出变量的值,如 `${name}` 输出数据模型中的`name`属性值。 - **文本输出**:`&lt;@text&gt;` 或 `${'text'}` - **条件判断**:`&lt;#if&gt;`、`&lt;#elseif&gt;`、`&lt;#else&gt;...

    freemarker入门文档及例子

    1. 模板:Freemarker模板是纯文本文件,其中包含静态文本和控制结构,如条件语句和循环。它们用来生成最终输出。 2. 数据模型:这是Java对象集合,由应用程序提供给Freemarker,模板中的变量引用这些对象来生成输出...

    eclipse中FreeMarkerIDE插件

    FreeMarker模板语法** FreeMarker模板语言由三部分组成:文本、指令和变量。文本是模板的基本组成部分,不被FreeMarker处理;指令以`&lt;#...&gt;`开头,用于控制流程或引用其他模板;变量以`${...}`表示,用于插入数据...

    利用freemarker制作的diamante生成器

    Freemarker模板语言(.ftl文件)具有丰富的语法,可以用来控制流程、进行条件判断、循环等,非常灵活。 2. **反射机制**:Java反射API允许在运行时访问类的信息,如类名、构造函数、方法和字段。通过`Class`类,...

    java freemarker 语法

    ### Java Freemarker 语法详解 #### 一、Freemarker 概述与基本概念 Freemarker 是一种用于生成动态内容的模板引擎,它能够帮助开发者将数据模型中的数据渲染到 HTML 页面上,从而实现前后端分离的效果。...

    FreeMarker语法参考

    #### 一、FreeMarker概述与基本语法 FreeMarker是一个用Java编写的模板引擎,它能够将数据模型与表现层(HTML、XML等)分离,使得前端展示逻辑与后端业务逻辑可以独立开发和维护。本文档基于官方资料,对FreeMarker...

    eclipse的freemarker插件

    1. **语法高亮**:Freemarker模板文件(.ftl)将在Eclipse中以彩色编码显示,帮助开发者快速识别不同类型的语句,如变量、指令和注释,提高代码可读性。 2. **代码提示和补全**:插件提供自动补全功能,当输入...

    FreeMarker语法知识

    FreeMarker模板文件由四个主要部分组成: 1. **文本**:直接输出到最终文档中的内容。 2. **注释**:使用`注释内容 --&gt;`语法定义,这些注释不会出现在输出中。 3. **插值**:使用`${}`或`#{}`格式,将数据模型中的...

    freemarker语法

    ### FreeMarker语法详解 #### 一、概述 FreeMarker是一个强大的模板引擎,广泛应用于Web开发领域,用于将数据模型中的数据动态地填充到HTML、XML等格式的文档中。其核心概念包括文本、注释、插值以及FTL指令。 ##...

    Freemarker详解

    - **高效的编译速度**:FreeMarker模板一旦被编译,其执行效率非常接近静态HTML页面,这极大提高了Web应用的性能。 - **清晰的逻辑分离**:通过模板将前端展示逻辑与后端业务逻辑分开,有助于提高代码的可维护性与...

    freemarker 源码及文档

    例如,`freemarker.template`包下的`Template`类是处理模板的核心,`Configuration`类负责配置和管理模板,而`SimpleHash`和`TemplateModel`接口则是Java对象与Freemarker模板之间数据绑定的关键。 文档详解: `...

    FreeMarker相关学习文档

    提供的"FreeMarker相关学习文档"可能包括模板语法详解、最佳实践、示例代码等内容,可以帮助初学者快速上手。通过阅读这些资料,你可以深入了解FreeMarker的各个方面,从而更好地利用这个强大的模板引擎。 总结,...

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

    - **模板一览**:提供了关于模板语法的详细介绍,包括指令、表达式等核心元素。 #### 2. 数值和类型 - **基本内容**:讲解了FreeMarker中数值的表示方式以及各种类型的使用场景。 - **类型**:深入探讨了...

    Freemarker简介及标签详解大全

    Freemarker是一个强大的模板引擎,常用于Web开发中的视图层渲染,尤其在Java领域应用广泛。它将静态模板语言与动态数据结合,允许开发者在不接触后端代码的情况下生成HTML或其他格式的文档。本篇文章将对Freemarker...

    springMVC+freemarker框架

    当Controller返回的ModelAndView中的视图名为一个模板文件名时,FreeMarkerViewResolver会找到对应的FreeMarker模板文件,并结合模型数据渲染成HTML。 例如,Controller中一个处理请求的方法可能如下: ```java @...

Global site tag (gtag.js) - Google Analytics