FreeMarker 语法和工作原理
FreeMarker 是一款基于 Java 的模板引擎,它将数据与模板结合,生成最终的 HTML 页面。FreeMarker 的语法简洁易懂,易于学习和使用,同时功能强大,可以满足各种动态页面生成的需求。
一、基本语法
1. 数据输出
FreeMarker 使用 $
符号来访问数据模型中的变量,例如:
<h1>你好,${name}!</h1>
在这个例子中,name
是数据模型中的一个变量,FreeMarker 会将该变量的值替换到模板中。
处理空值:
如果 name
变量为空,则默认情况下,模板中的 ${name}
会提示不能为空。为了处理这种情况,可以设置一个默认值,使用 !
操作符,例如:
<h1>你好,${name!匿名用户}!</h1>
在这个例子中,如果 name
变量为空,则会输出 匿名用户
。
2. 循环遍历
FreeMarker 使用 #list
指令来遍历列表,例如:
<ul>
<#list fruits as fruit>
<li>${fruit}</li>
</#list>
</ul>
在这个例子中,fruits
是数据模型中一个包含水果名称的列表,fruit
是循环遍历时的当前水果名称。
3. 条件判断
FreeMarker 使用 #if
和 #else
指令进行条件判断,例如:
<#if age > 18>
你已经成年了
<#else>
你未成年
</#if>
在这个例子中,age
是数据模型中的一个变量,根据其值判断是否成年。
4. 导入其他模板
FreeMarker 使用 #include
指令来导入其他模板文件,例如:
<#include "header.ftl">
<h1>你好,${name}!</h1>
<#include "footer.ftl">
这个例子中,header.ftl
和 footer.ftl
是其他模板文件,它们将被插入到当前模板中。
5. 宏定义
FreeMarker 使用 #macro
指令定义宏,方便重复使用代码,例如:
<#macro greeting name>
<h1>你好,${name}!</h1>
</#macro>
<@greeting name="张三"/>
这个例子中,greeting
是一个宏,它接收一个名为 name
的参数,并输出相应的问候语。
6. boolean 值转化
FreeMarker 使用 ?string('是,'否')
可以快速的转化,例如
<span>公开:${(open?? && open).('是','否')}</span>
熟悉以上的语法,基本就能完成 zrlog 关于模版页面的定制工作了,如果还想了解更多 freemarker 的语法,可以访问 http://www.freemarker.net/ 查看更多的 freemarker 语法相关的内容
二、工作原理
FreeMarker 的工作原理可以概括为以下几个步骤:
- 加载模板文件: FreeMarker 会加载指定的模板文件,并解析其语法结构。
- 准备数据模型: 用户需要提供一个数据模型,它包含了模板中需要使用的数据。
- 合并模板和数据: FreeMarker 将数据模型中的变量值替换到模板文件中的占位符,生成最终的 HTML 页面。
- 输出结果: FreeMarker 将生成的 HTML 页面输出到指定的输出流,例如文件或网页浏览器。
三、总结
FreeMarker 提供了简洁的语法和强大的功能,可以满足各种动态页面生成的需求。它与 Java 语言无缝集成,可以方便地与 各种 web 和非 web 等框架结合使用