FreeMarker模板引擎完全指南

需积分: 50 6 下载量 135 浏览量 更新于2024-08-01 收藏 339KB DOC 举报
FreeMarker 是一个强大的Java模板引擎,常用于生成动态Web页面或电子邮件等。它与MVC模式中的视图层紧密关联,允许开发者将业务逻辑与展示逻辑分离,使得开发者可以专注于内容和布局,而不必关心如何将数据渲染成最终的HTML。 FreeMarker 的核心思想是模板和数据模型的结合。模板是HTML或其他文档格式,其中嵌入了FreeMarker语法,用来指示哪些地方应该插入数据。数据模型是Java对象结构,通常由控制器(如Spring MVC的Controller)提供,包含了要显示的数据。FreeMarker解析模板,将数据模型中的值替换到模板的占位符中,生成最终输出。 1. **FreeMarker基本语法** - **Interpolations**(插值表达式):以`${}`包裹的表达式,例如`${name}`,FreeMarker会在运行时查找数据模型中对应的`name`属性并输出其值。 - **FTL标记**:FreeMarker模板语言标记,通常以`#`开头,如`#if`、`#foreach`等,用于控制流和逻辑判断。 - **注释**:使用`<#--`和`-->`包围的文本不会被输出,用于在模板中添加注释。 2. **内置函数**:FreeMarker提供了丰富的内置函数,例如字符串操作、日期时间处理、条件判断等,如`?html`用于转义HTML特殊字符,`?length`获取序列或字符串的长度,`?upper_case`转换字符串为大写等。 3. **数据模型**:典型的FreeMarker数据模型是一个树形结构,可以有任意复杂的层次。例如,根节点`root`下挂载了`animals`和`test`等子节点,`animals`又包含多个动物对象,每个动物对象有自己的属性如`size`和`price`。 - **变量**:可以通过点号`.`访问数据模型中的属性,如`${animals.elephant.price}`获取大象的价格。 - **Sequences**(序列):类似于数组,通过数字索引访问,如`${animals[1].name}`获取序列中的第二个动物的名称。 4. **控制结构**: - **If语句**:`<#if expr>`,当`expr`为真时执行后续代码。 - **Else**:`<#else>`,与`<#if>`配合,当条件不满足时执行。 - **Elseif**:`<#elseif expr>`,添加额外条件。 - **ForEach**:`<#foreach item in seq>`,遍历序列,`item`是当前项的引用。 5. **其他语法**: - **List**:`<#list items as item>`,遍历列表并用`item`表示当前元素。 - **Include**:`<#include "template.ftl">`,嵌入另一个模板。 - **Macro**:定义可重复使用的代码片段。 - **Assign**:`<#assign name = expr>`,分配一个变量。 - **Functions**:自定义函数或调用内置函数,如`<#function myFunc arg1 arg2>...<#return result>`。 理解并熟练运用这些FreeMarker语法,能够帮助开发者高效地创建动态模板,生成定制化的输出。在实际项目中,FreeMarker通常与MVC框架集成,如Spring、Struts等,以提供更完整的应用开发能力。
2025-01-08 上传