FreeMarker

一:FreeMarker简介

FreeMarker是一种模板引擎:是一种基于模板的,用来生成输出文本的通用工具。

FreeMarker的设计实际上是被用来生成HTML网页,尤其是通过基于实现了MVC模型的Servlet应用程序。使用MVC模式的动态网页的构思使得你可以将前端设计者从程序员分离出来,因为应用程序的逻辑和页面设计已经分开了。

FreeMarker仅仅使用模板生成文本页面来呈现已经准备好的数据。

二:FreeMarker的语法

1. 类型

1.1 标量
  • 字符串:这是文本类型
  • 数字::这是字符类型
  • 日期/时间:这是时间日期类型
  • 布尔值
1.2 容器
  • 哈希表
  • 序列

<#list ["winter", "spring", "summer", "autumn"] as x>
${x}

                                                                                                  

也可以用start..end 定义存储数字范围的序列,这里的start 和end 是处理数字值表达式,比如2..5 和[2, 3, 4, 5]是相同的,但是使用前者会更有效率(内存
占用少而且速度快)。

1.3 子程序
  • 方法和函数
  • 用户自定义指令

1.4 使用原生字符串

字符序列$ { ;(#{)有特殊的含义,如果想要打印 ${,在开始的引号或者单引号之前放置字母r

 

 

2. 模板

2.1 总体结构

  • Text文本:文本会照着原样来输出
  • Interpolation插值:${....}:FreeMarker将会输出真实的值来替换花括号内的表达式,这样的表达式被称为interpolations插值。
  • FTL tags标签:这些标签的使用一般以符号#开头(用户自定义的FTL标签使用@来代替#)
  • Comments注释:

2.1 指令

2.1.1 if指令

使用if指令可以有条件地跳过模板的一部分,这和程序语言中的if是相似的。

<#if condition> <#if>标签之间的内容将会被忽略

<#if condition><#else><#if>

2.1.2 list指令

<#list sequence as loopVariable>repeatThis

repeatThis部分将会在给定的sequence遍历时在每项中重复,在所有的重复中,loopVariable将持有当前项值。

2.1.3. include指令

使用include指令,我们可以在当前的模板中插入其他文件的内容。

2.2 表达式

${expression}:使用插值的方式,表达式计算的结果会打印到你放置的位置

2.3 内建函数

内建函数提供供可用的内置功能。内建函数以?形式提供变量的不同形式或者其他信息。

 

3. 自定义指令

自定义指令可以使用macro指令来定义。

宏是有一个变量名 模板段,这样就能进行重复性的工作

<#macro name...par> 之间是模板段,可以包含插值和FLT标签,之间的内容是宏定义体,使用<@...>,称为宏调用。

name是宏的名称,par是参数,在宏名称后面位置是用来定义变量的。

<#macro name> <#nested>:自定义指令可以嵌套内容。

在用户自定义指令中使用";"代替as。

4. 在模板中定义变量

模板中可以使用在数据模型中定义的变量。在数据模型之外,模板本身也可以定义变量来使用。这些临时变量可以适应FRL指令创建和替换。

模板执行时都要维护它自己 这些变量的私有设置,这些变量在页面用以呈现,初始值为空,当模板执行结束这些变量便被销毁。

模板里定义的变量比定义在数据型中的同名参数有更高的优先级。

在模板中可以定义三种类型的变量:

  • 简单变量:它能从模板中的任意位置来访问,或者从使用include指令引入的模板访问。可以使用assign或macro指令来创建或者替换这些变量。
  • 局部变量:它们只能被设置在宏定义体内,而且只在宏内可见。
  • 循环变量:循环变量时由指令(如list)自动创建的。
  • 使用globals

5. 处理不存在的变量

在实际应用中数据模型经常会有可选的变量。(也就是说有时可能不存在实际值)。除了一些典型的人为原因导致失误,FreeMarker不能容忍引用不存在的变量,除非明确地告诉它当变量不存在时候如何处理。一个不存在的变量和一个是null的变量,对于FreeMarker来说是一样的。下面介绍典型的处理方法。

  • 不论在哪里引用变量,都可以指定一个默认值爱避免变量丢失这种情况,通过变量名后面跟着一个!和默认值。

Welcome ${user!"Anonymous"}!

当user从数据模型中丢失时,模板将会将user的值表示为字符串”Anoymous"。

  • 在变量名后面通过放置??来询问FreeMarker一个变量是否存在。将它和if指令合并,那么如果user变量不存在的话将忽略整个问候代码段:

<#if user??>

Welcome ${user}!

  • 要注意这个操作是FreeMarker 2.3.7 版本以后才有的(用来代替内建函数default,exists 和if_exists)。

6. 备忘录

你可能感兴趣的:(Web前端,FreeMarker模板,FreeMarker语法,FreeMarker)