FreeMarker是一款模板引擎,它基于模板和要改变的数据生成输出文本,如HTML网页、电子邮件、配置文件、源代码等。作为前端开发工程师,了解FreeMarker可以帮助我们更好地与后端进行数据交互和页面渲染。
FreeMarker的语法丰富且功能强大,它提供了一系列指令、插值、表达式和内置函数,用于在模板中动态生成文本内容。
FreeMarker主要语法及用法
1. 文本
直接输出的静态文本,不需要任何特殊标记。
Hello, World!
2. 注释
使用<#-- ... -->
来添加不会出现在最终输出中的注释。
<#-- 这是一个注释 -->
3. 插值
使用${...}
来输出数据模型中的变量值。
${user.name}
也可以使用#{...}
进行数字格式化或表达式计算。
#{price;M2}
4. 指令
- assign:用于在模板中定义变量。
<#assign name="John Doe">
- if/elseif/else:用于条件判断。
<#if user.loggedIn>
Welcome, ${user.name}!
<#else>
Please log in.
</#if>
- list/break/continue:用于遍历集合。
<#list users as user>
${user.name}<br>
<#if user.isAdmin><#break></#if>
</#list>
- include:包含另一个模板的内容。
<#include "header.ftl">
- import:导入另一个模板中定义的宏。
<#import "macros.ftl" as m>
- macro:定义一个可重用的模板片段(宏)。
<#macro greet name>
Hello, ${name}!
</#macro>
- nested:与macro指令结合使用,表示宏中的嵌套内容。
<@m.greet name="Jane">
<p>This is nested content.</p>
</@m.greet>
- setting:设置FreeMarker的行为,如输出格式、错误处理等。
<#setting output_format="HTML">
5. 表达式
表达式可以在插值或指令中使用,支持算术运算、逻辑运算、比较运算等。
${user.age + 1}
${user.name == "Admin"}
6. 内置函数
FreeMarker提供了一系列内置函数,用于字符串处理、日期格式化、集合操作等。
${user.name?upper_case}
${today?date}
${users?size}
复杂HTML模板示例
以下是一个包含上述所有语法引用的复杂HTML模板示例:
<!DOCTYPE html>
<html>
<head>
<title>${title}</title>
<#setting output_format="HTML">
</head>
<body>
<#-- 包含头部模板 -->
<#include "header.ftl">
<#-- 使用assign指令定义变量 -->
<#assign username="JohnDoe">
<#assign isLoggedIn=true>
<#assign userRoles=["user", "admin"]>
<#-- 条件判断 -->
<#if isLoggedIn>
<p>Welcome, ${username}!</p>
<#if userRoles?seq_contains("admin")>
<p>You have administrative privileges.</p>
</#if>
<#else>
<p>Please <a href="login.html">log in</a>.</p>
</#if>
<#-- 列表遍历 -->
<ul>
<#list userRoles as role>
<li>${role}</li>
</#list>
</ul>
<#-- 宏定义与调用 -->
<#macro displayMessage message>
<p style="color: ${message.color};">${message.text}</p>
</#macro>
<@displayMessage message={"color": "red", "text": "This is an error message."}/>
<#-- 使用内置函数 -->
<p>Current date and time: ${.now?datetime}</p>
<p>Uppercase username: ${username?upper_case}</p>
<#-- 包含底部模板 -->
<#include "footer.ftl">
</body>
</html>
在这个模板中,使用了FreeMarker 的主要语法,包括文本输出、注释、插值、指令(assign、if、list、include、macro)、表达式和内置函数。