FreeMarker 语法和工作原理


FreeMarker 是一款基于 Java 的模板引擎,它将数据与模板结合,生成最终的 HTML 页面。FreeMarker 的语法简洁易懂,易于学习和使用,同时功能强大,可以满足各种动态页面生成的需求。

一、基本语法

1. 数据输出

FreeMarker 使用 $ 符号来访问数据模型中的变量,例如:

  1. <h1>你好,${name}!</h1>

在这个例子中,name 是数据模型中的一个变量,FreeMarker 会将该变量的值替换到模板中。

处理空值:

如果 name 变量为空,则默认情况下,模板中的 ${name} 会提示不能为空。为了处理这种情况,可以设置一个默认值,使用 ! 操作符,例如:

  1. <h1>你好,${name!匿名用户}!</h1>

在这个例子中,如果 name 变量为空,则会输出 匿名用户

2. 循环遍历

FreeMarker 使用 #list 指令来遍历列表,例如:

  1. <ul>
  2. <#list fruits as fruit>
  3. <li>${fruit}</li>
  4. </#list>
  5. </ul>

在这个例子中,fruits 是数据模型中一个包含水果名称的列表,fruit 是循环遍历时的当前水果名称。

3. 条件判断

FreeMarker 使用 #if#else 指令进行条件判断,例如:

  1. <#if age > 18>
  2. 你已经成年了
  3. <#else>
  4. 你未成年
  5. </#if>

在这个例子中,age 是数据模型中的一个变量,根据其值判断是否成年。

4. 导入其他模板

FreeMarker 使用 #include 指令来导入其他模板文件,例如:

  1. <#include "header.ftl">
  2. <h1>你好,${name}!</h1>
  3. <#include "footer.ftl">

这个例子中,header.ftlfooter.ftl 是其他模板文件,它们将被插入到当前模板中。

5. 宏定义

FreeMarker 使用 #macro 指令定义宏,方便重复使用代码,例如:

  1. <#macro greeting name>
  2. <h1>你好,${name}!</h1>
  3. </#macro>
  4. <@greeting name="张三"/>

这个例子中,greeting 是一个宏,它接收一个名为 name 的参数,并输出相应的问候语。

6. boolean 值转化

FreeMarker 使用 ?string('是,'否') 可以快速的转化,例如

  1. <span>公开:${(open?? && open).('是','否')}</span>

熟悉以上的语法,基本就能完成 zrlog 关于模版页面的定制工作了,如果还想了解更多 freemarker 的语法,可以访问 http://www.freemarker.net/ 查看更多的 freemarker 语法相关的内容

二、工作原理

FreeMarker 的工作原理可以概括为以下几个步骤:

  1. 加载模板文件: FreeMarker 会加载指定的模板文件,并解析其语法结构。
  2. 准备数据模型: 用户需要提供一个数据模型,它包含了模板中需要使用的数据。
  3. 合并模板和数据: FreeMarker 将数据模型中的变量值替换到模板文件中的占位符,生成最终的 HTML 页面。
  4. 输出结果: FreeMarker 将生成的 HTML 页面输出到指定的输出流,例如文件或网页浏览器。

三、总结

FreeMarker 提供了简洁的语法和强大的功能,可以满足各种动态页面生成的需求。它与 Java 语言无缝集成,可以方便地与 各种 web 和非 web 等框架结合使用