FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4,FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出 ### Freemarker教程详解 #### 一、Freemarker概述与组成部分 **Freemarker**是一种用于生成动态HTML页面的模板引擎。它通过定义模板文件来处理数据模型,并将其转化为最终的输出文档。Freemarker的模板文件并不比HTML页面复杂多少,主要由四个基本组成部分构成: 1. **文本**: 直接输出的部分。这部分内容不会被Freemarker解释,而是直接输出到最终生成的文档中。 2. **注释**: `<#-- ... -->` 格式部分,不会输出。注释内容仅供开发者参考,不会出现在最终的输出文档中。 3. **插值**: 即 `${...}` 或 `#{...}` 格式的部分,将使用数据模型中的内容替代输出。插值是Freemarker中最常用的功能之一,用于显示动态数据。 4. **FTL指令**: Freemarker指令,与HTML标记类似,名字前加`#`予以区分,不会输出。这些指令控制着模板的行为,如循环、条件判断等。 #### 二、示例模板分析 下面通过一个简单的Freemarker模板例子来详细了解上述四个部分的应用: ```html <html> <head> <title>Welcome!</title> </head> <body> <#-- 注释部分 --> <#-- 下面使用插值 --> <h1>Welcome ${user}!</h1> <p>We have these animals:</p> <ul> <#-- 使用FTL指令 --> <#list animals as animal> <li>${animal.name} for ${animal.price} Euros</li> </#list> </ul> </body> </html> ``` - **文本**: `<html>`、`<head>`、`<title>`等HTML标签属于文本部分,它们将直接作为输出的一部分。 - **注释**: `<#-- 注释部分 -->` 属于注释部分,只供开发人员查看,不参与输出。 - **插值**: `${user}` 和 `${animal.name}`、`${animal.price}` 属于插值部分,表示使用数据模型中的变量值来替换输出。 - **FTL指令**: `<#list animals as animal>` 是一个典型的FTL指令,用于遍历`animals`列表,并为每个元素执行一次`<li>`标签内的代码。 #### 三、FTL指令规则 在Freemarker中,使用FTL标签来使用指令,主要有三种类型的FTL标签: 1. **开始标签**: `<#directiveName parameter>` 2. **结束标签**: `</#directiveName>` 3. **空标签**: `<#directiveName parameter/>` - 实际上,在使用标签时前面的符号`#`也可能会变成`@`,如果该指令是一个用户自定义指令而不是系统内置指令时,应将`#`符号改成`@`符号。 - 在使用FTL标签时,应该有正确的嵌套,而不是交叉使用,这一点类似于XML标签的用法。 - 如果全用不存在的指令,Freemarker不会使用模板输出,而是产生一个错误消息。 - Freemarker会忽略FTL标签中的空白字符。值得注意的是`<`, `/` 和指令之间不允许有空白字符。 #### 四、插值规则 Freemarker的插值有两种类型:通用插值 `${expr}` 和数字格式化插值 `#{expr;format}`。 1. **通用插值**: - 插值结果为字符串值: 直接输出表达式结果。 - 插值结果为数字值: 根据默认格式(由`#setting`指令设置)将表达式结果转换成文本输出。可以使用内建的字符串函数格式化单个插值。 - 插值结果为日期值: 根据默认格式(由`#setting`指令设置)将表达式结果转换成文本输出。同样可以使用内建的字符串函数格式化单个插值。 - 插值结果为布尔值: 根据默认格式(由`#setting`指令设置)将表达式结果转换成文本输出。可以使用内建的字符串函数格式化单个插值。 2. **数字格式化插值**: - 数字格式化插值可采用`#{expr;format}`形式来格式化数字,其中`format`可以是: - `mX`: 小数部分最小X位 - `MX`: 小数部分最大X位 例如: ```html <#assign x = 2.582/> <#assign y = 4/> #{x;M2}<#-- 输出2.58 --> #{y;M2}<#-- 输出4 --> #{x;m2}<#-- 输出2.6 --> #{y;m2}<#-- 输出4.0 --> #{x;m1M2}<#-- 输出2.58 --> #{y;m1M2}<#-- 输出4.0 --> ``` #### 五、总结 Freemarker作为一种强大的模板引擎,其核心功能在于通过定义模板文件来处理数据模型,并将其转化为最终的输出文档。通过理解Freemarker的组成部分(文本、注释、插值、FTL指令)及其规则(FTL指令规则、插值规则),我们可以更灵活地应用Freemarker来生成动态内容。无论是简单的HTML页面还是复杂的业务报表,Freemarker都能提供强大的支持。
剩余30页未读,继续阅读
- 粉丝: 2
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 所有算法均用 Python 实现.zip
- redis-standalone.yml redis k8s单点部署
- Python基于Scrapy兼职招聘网站爬虫数据分析设计(源码)
- zipkin.yml zipkin k8s部署
- YY9706.102-2021医用电气设备第2-47部分
- 通过运用时间序列ARIMA模型与循环神经网络(LSTM)对中国包装机器数量进行预测(python源码)
- Ruby编程基础与进阶指南
- 基于ARIMA模型的股票预测(python源码)
- 基于阿里云对象存储的对文件进行批量修改、批量解冻、批量上传
- 山东联通-海信IP501H-GK6323V100C-1+8G-4.4.2-当贝桌面-卡刷包