FreeMarker模板语言详解:语法与指令

需积分: 3 3 下载量 79 浏览量 更新于2024-07-30 收藏 31KB DOCX 举报
"FreeMarker是一种基于模板的Java技术,用于生成动态内容,尤其适用于Web应用。这个文档提供了FreeMarker的基本语法和示例,包括文本、注释、插值和FTL指令的使用。" FreeMarker作为一款强大的模板语言,它的语法简洁而灵活,主要由以下几个部分构成: 1. **文本**:模板文件中大部分是普通的文本,这些文本会被原样输出到最终生成的文档中。 2. **注释**:以`<#---->`包围的文本被视为注释,不会出现在生成的输出中。 3. **插值**:使用`${}`或`#{}`表示的插值表达式,它们会被替换为数据模型中对应的值进行输出。例如,`${user}`会输出数据模型中名为"user"的变量值。 4. **FTL指令**:FreeMarker特有的指令,通常以`#`开头,如`<#list>`、`<#if>`等,它们用于控制模板的逻辑结构,且不会在最终输出中显示。 以下是一个FreeMarker模板的例子,展示了上述四个部分的使用: ```html <html> <head> <title>Welcome!</title> </head> <body> <#-- 注释部分 --> <h1>Welcome ${user}!</h1> <p>We have these animals:</p> <ul> <#list animals as being> <li>${being.name} for ${being.price} Euros</li> </#list> </ul> </body> </html> ``` **FTL指令规则**: FreeMarker的FTL标签与HTML标签类似,分为开始标签、结束标签和空标签。开始标签形如`<#directive name parameter>`,结束标签形如`</#directive name>`,空标签形如`<#directive name parameter/>`。如果指令是用户自定义的而非内置指令,`#`应改为`@`。标签需要正确嵌套,交叉使用会导致错误。FTL标签内的空白字符会被忽略,`<`, `>`和指令之间也不允许有空白。 **插值规则**: FreeMarker提供两种类型的插值: 1. **通用插值**: `${expr}`,根据表达式`expr`的结果进行输出。如果结果是字符串,则直接输出;如果是数字,则按默认格式输出。 2. **数字格式化插值**:`#{expr}`或`#{expr;format}`,允许对数字进行特定格式的显示。 对于通用插值,还有以下几种情况: - 字符串值:直接输出表达式结果。 - 数字值:默认按照数字格式输出。 - `null`值:输出空字符串。 - 其他对象:调用对象的`toString()`方法输出。 FreeMarker的灵活性在于它能够结合数据模型动态地生成内容,使得开发者能够创建出高度定制化的输出。通过熟练掌握FreeMarker的这些基本语法和规则,你可以创建出复杂的模板,满足各种需求,尤其是在构建动态网站或邮件生成等场景下。