`

Freemarker学习--模版开发

阅读更多

一、什么是Freemarker

FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本。模板文件即ftl文件,数据对象是java对象。

模板 + 数据模型 = 输出

二、Freemarker的数据模型

1、顶层数据模型

数据模型是树状结构的,顶层默认为root节点

(root)

    |+- animals

    |     |+- mouse

    |     |     |+- size = "small"

    |     |     |+- price = 50

    |     |+- elephant

2、Hashes类型

这种类型可以通过名字来查找。顶层节点就是这种类型。例如可以通过animals.mouse来访问mouse。

3、sequences 类型

它们像哈希表那样存储子变量,但是子变量没有名字,它们只是列表中的项。

(root)

    | +- animals

    |     |+- (1st)

    |     |     |+- name = "mouse"

    |     |     |+- size = "small"

    |     |     |+- price = 50

    |     |+- (2nd)

要访问序列的子变量,可以使用方括号形式的数字索引下标。 索引下标从0开始

4、scalars 类型

包括:

  • 字符串:就是文本,也就是任意的字符序列。
  • 数字:这是数值类型,就像上面的 price。 在FreeMarker中,字符串 "50" 和数字 50 是两种完全不同的东西。前者是两个字符的序列 (这恰好是人们可以读的一个数字),而后者则是可以在数学运算中直接被使用的数值。

  • 日期/时间: 可以是日期-时间格式(存储某一天的日期和时间), 或者是日期(只有日期,没有时间),或者是时间(只有时间,没有日期)。

  • 布尔值:对应着对/错(是/否,开/关等值)类似的值。 比如动物可以有一个 protected (受保护的,译者注) 的子变量, 该变量存储这个动物是否被保护起来的值。

 

三、Freemarker的模板

  • ${...}: FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式被称为 interpolation(插值,译者注)。

  • FTL 标签 (FreeMarker模板的语言标签): FTL标签和HTML标签有一些相似之处,但是它们是FreeMarker的指令,是不会在输出中打印的。 这些标签的名字以 # 开头。(用户自定义的FTL标签则需要使用 @ 来代替 #。)

  • 注释: 注释和HTML的注释也很相似, 但是它们使用 <#-- and --> 来标识。 不像HTML注释那样,FTL注释不会出现在输出中(不出现在访问者的页面中), 因为 FreeMarker会跳过它们。

  • 其他任何不是FTL标签,插值或注释的内容将被视为静态文本, 这些东西不会被FreeMarker所解析;会被按照原样输出出来。

if 指令

<#if animals.python.price < animals.elephant.price> Pythons are cheaper than elephants today. <#elseif animals.elephant.price < animals.python.price> Elephants are cheaper than pythons today. <#else> Elephants and pythons cost the same today. </#if>

 通常来讲,如果 condition 是false(布尔值),那么介于 <#if condition> 和 </#if> 标签中的内容会被略过。

 

list 指令

<p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, </#list>

使用分隔符 <#sep>

 

include 指令

使用 include 指令, 我们可以在模板中插入其他文件的内容。

事实上,指令有两种类型: 预定义指令 和 用户自定义指令。 对于用户自定义的指令使用 @ 来代替 #,比如,<@mydirectiveparameters>...</@mydirective>。 更深的区别在于如果指令没有嵌套内容,那么必须这么使用 <@mydirective parameters />自定义指令也可以通过代码自定义

 自定义指令示例:

<#macro printAnimal animal>

  <animal name="${animal.name}" size="${animal.size}">

  <#nested>

</#macro>

 

<#list animals.getMap()?values as animal>

<@printAnimal animal>

<!-- xml注释内容 -->

</@printAnimal>

</#list>

四、Freemarker的内建函数

内建函数很像子变量(如果了解Java术语的话,也可以说像方法), 它们并不是数据模型中的东西,是 FreeMarker 在数值上添加的。 为了清晰子变量是哪部分,使用 ?(问号)代替 .(点)来访问它们。常用内建函数的示例:

  • user?html 给出 user 的HTML转义版本, 比如 & 会由 &amp; 来代替。

  • user?upper_case 给出 user 值的大写版本 (比如 "JOHN DOE" 来替代 "John Doe")

  • animal.name?cap_first 给出 animal.name 的首字母大写版本(比如 "Mouse" 来替代 "mouse")

  • user?length 给出 user 值中 字符的数量(对于 "John Doe" 来说就是8)

  • animals?size 给出 animals 序列中 项目 的个数(我们示例数据模型中是3个)

  • 如果在 <#list animals as animal> 和对应的 </#list> 标签中:

    • animal?index 给出了在 animals 中基于0开始的 animal的索引值

    • animal?counter 也像 index, 但是给出的是基于1的索引值

    • animal?item_parity 基于当前计数的奇偶性,给出字符串 "odd" 或 "even"。在给不同行着色时非常有用,比如在 <td class="${animal?item_parity}Row">中。

一些内建函数需要参数来指定行为,比如:

  • animal.protected?string("Y", "N") 基于 animal.protected 的布尔值来返回字符串 "Y" 或 "N"。

  • animal?item_cycle('lightRow','darkRow') 是之前介绍的 item_parity 更为常用的变体形式。

  • fruits?join(", ") 通过连接所有项,将列表转换为字符串, 在每个项之间插入参数分隔符(比如 "orange,banana")

  • user?starts_with("J") 根据 user 的首字母是否是 "J" 返回布尔值true或false。

内建函数应用可以链式操作,比如user?upper_case?html 会先转换用户名到大写形式,之后再进行HTML转义。(这就像可以链式使用 .(点)一样)

处理不存在的变量

<h1>Welcome ${user!"visitor"}!</h1> 当user为空时,使用默认只visitor

<#if user??><h1>Welcome ${user}!</h1></#if> ??表示条件判断,相当于if(null!=user)

分享到:
评论

相关推荐

    freemarker-2.3.22

    Freemarker是一个强大的模板引擎,常用于Java web开发中生成动态HTML或其他文本格式的输出。它的核心设计理念是将数据模型与展示逻辑分离,使得开发者可以专注于业务数据的处理,而设计师则可以专心于页面布局和样式...

    freemarker-ide-0.9.14.rar

    它通过集成到IDE中,使得开发者能够更高效地进行Freemarker模板的编写和调试,从而提高整体的开发效率。在Java Web开发中,熟练掌握Freemarker和这类辅助工具,对于提升项目质量和开发速度都有显著帮助。

    apache-freemarker-2.3.26-incubating-bin.tar.gz

    Apache FreeMarker是一个强大的、开源的模板引擎,常用于生成HTML和其他动态内容,尤其在Web应用程序中,如...通过熟练掌握FreeMarker,开发者可以更高效地构建和维护Web应用程序的前端部分,提高开发效率和用户体验。

    FreeMarkerDemo-java.rar

    综上所述,这个"FreeMarkerDemo-java.rar"项目是一个实用的学习资源,它教你如何在Spring Boot环境中利用FreeMarker来处理Word文档,这对于那些需要生成动态报告或文档的系统来说非常有价值。通过研究这个示例,...

    freemarker --struts中的应用

    Freemarker是一个强大的模板引擎,常用于Java Web开发中,特别是在Struts框架中有着广泛的应用。Struts是一款经典的MVC(Model-View-Controller)框架,它帮助开发者将业务逻辑、数据模型和用户界面分离,使得代码...

    freemarker-2.3.8源码

    Freemarker是一个强大的模板引擎,常用于Web开发中生成动态HTML或其他类型的文本。它是Java语言的一个开源项目,允许开发者将业务逻辑与展示层分离,从而提高代码的可维护性和灵活性。2.3.8版本是Freemarker的一个...

    freemarker-ide插件

    Freemarker-IDE是一款专为开发人员设计的Eclipse插件,它主要针对Freemarker模板语言提供了强大的支持。在Eclipse这样的集成开发环境中,这款插件能够显著提升开发人员编写和调试`.ftl`(FreeMarker Template ...

    freemarker操作手册-完整freemarker教程

    Freemarker是一个强大的模板引擎,常用于Web应用中的视图层开发,特别是在Java环境中,它作为MVC设计模式的一部分,负责生成动态HTML或其他格式的文本。本教程将深入讲解Freemarker的核心概念、语法和实际应用,帮助...

    Freemarker-2.3.19中文手册和jar包

    Freemarker是一个强大的...综上所述,Freemarker是一个功能丰富的模板引擎,适用于Java Web开发,通过与数据模型的结合,可以生成动态内容。提供的中文手册和jar包,使得中文开发者能够更便捷地学习和使用这一工具。

    freemarker-2.3.26-incubating中文手册

    Freemarker是一个强大的模板引擎,常用于Web应用中的视图层开发,比如JavaEE的MVC框架Struts、Spring MVC等。它允许开发者使用简单的文本模板语言(Template Language,简称TL)来生成输出,如HTML、XML或其他文本...

    代码生成器必备jar包:Freemarker-2.3.23

    Freemarker是一个强大的Java模板引擎,它允许程序员将业务逻辑与呈现逻辑分离,使得开发者可以专注于数据处理,而模板设计者则负责布局和展示。在Java Web开发中,Freemarker常用于生成静态HTML页面,例如在MVC框架...

    freemarker学习资料汇总

    本压缩包集合了丰富的Freemarker学习资源,涵盖从基础到进阶的各种知识点,以下是这些文档中可能包含的详细内容: 1. **Freemarker中文手册.pdf**: 这份手册通常会详细介绍Freemarker的基本概念,如模板语言、...

    apache-freemarker

    在实际开发中,你可以通过Maven或Gradle等构建工具将FreeMarker添加为项目依赖,并根据需求创建和配置模板,然后使用FreeMarker API来渲染模板并生成最终的输出。 总之,Apache FreeMarker是一个强大且灵活的模板...

    freemarker-excel.zip

    在IT行业中,`Freemarker`是一个强大的模板引擎,常用于动态生成HTML、XML等文本。这个`freemarker-excel....同时,记得不断探索`Freemarker`和Apache POI的文档,了解更多高级特性,以便在未来的开发中更加得心应手。

    freemarker中文学习资料

    Freemarker是一个强大的模板引擎,常用于Web开发中生成动态HTML页面。它是Java语言的一个开源项目,遵循Apache软件基金会的Apache License。这个“freemarker中文学习资料”压缩包提供了详尽的网页版API文档,对于想...

    FreeMarker相关学习文档

    提供的"FreeMarker相关学习文档"可能包括模板语法详解、最佳实践、示例代码等内容,可以帮助初学者快速上手。通过阅读这些资料,你可以深入了解FreeMarker的各个方面,从而更好地利用这个强大的模板引擎。 总结,...

    chm 格式 freemarker-2.3.10

    `freemarker-2.3.10.chm`文件就是Freemarker 2.3.10的帮助文档以CHM格式编译后的版本,方便开发者查阅和学习。 在Freemarker的2.3.10版本中,你可以期待以下关键知识点: 1. **模板语言**:Freemarker的模板语言是...

    页面生成工具freemarker-2.3.14源码

    这个“freemarker-2.3.14”源码包包含了Freemarker 2.3.14版本的全部源代码,对于想要深入理解其工作原理、进行二次开发或者解决特定问题的开发者来说非常有价值。 Freemarker的核心概念是模板(Template)和数据...

    freemarker-2.3.32

    - `examples`: 示例代码或模板,供学习和参考。 - `lib`: 可能包含Freemarker依赖的其他库文件。 - `src`: 源代码,对于开发者来说,可以查看和理解内部实现。 - `LICENSE`和`NOTICE`: 许可证和版权信息,说明了使用...

    freemarker-2.3.10.tar.gz

    Freemarker是一个强大的模板引擎,常用于Web应用开发中生成动态HTML、XML或其他文本格式的输出。这个"freemarker-2.3.10.tar.gz"文件是Freemarker的2.3.10版本的归档包,采用的是tar.gz格式,这是一种常见的Linux/...

Global site tag (gtag.js) - Google Analytics