`

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-online-tester:Apache FreeMarker在线测试仪

    这对于学习模板语言特别方便。 对于此工具的已部署版本,您可以访问 。 开发说明 将存储库克隆到本地目录 从克隆的目录中运行./gradlew build (使用JDK 8) 如果要使用IDEA运行它,请运行./gradlew cleanidea ...

    FreeMarker 学习资料

    FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 l FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 l 虽然FreeMarker具有一些编程的能力,但通常由Java程序...

    基于SpringBoot+FreeMarker+MyBatis+ExtJs实现的一个通用后台管理系统,界面美观,适合快速迭代开发

    基于SpringBoot+FreeMarker+MyBatis+ExtJs实现的一个通用后台管理系统,界面美观,适合快速迭代开发 项目说明 技术栈: SpringBoot MyBatis Redis MySQL FreeMarker ExtJs 基于SpringBoot+FreeMarker+MyBatis+...

    Java学习指南(11) FreeMarker与MVC框架

    〖课程介绍〗这是一篇网站原理课程,先介绍FreeMarker模板引擎的使用,然后以FreeMarker API为基础设计一个MVC框架,以此展开说明MVC框架的流程原理。演示平台:Eclipse EE ,FreeMarker 2.3  〖主要内容〗包含以下...

    超完整FreeMarker中文教程,代码

    第一部分 模板开发指南 ................................................................................................. 10 第一章 模板开发入门 ............................................................

    Freemarker介绍

    1.freemarker是一个用Java开发的模板引擎 FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个...

    基于SpringJdbc和Freemarker的JAVA轻量级持久层框架设计源码

    本设计源码提供了一个基于SpringJdbc和Freemarker的JAVA轻量级持久层框架。项目包含158个文件,主要使用Java编程语言。...适合用于学习和实践Java技术,以及开发基于SpringJdbc和Freemarker的轻量级持久层框架。

    基于Springboot+FreeMarker实现的旅游景点交流论坛网设计源码+源代码+文档说明+sql文件

    现在给大家看的是一个基于Springboot框架+FreeMarker模板引擎的旅游景点交流论坛网站,网站一个有2个身份,普通用户和管理员。管理员登录后可以进入后台管理网站导航栏目,管理所有旅游景点文字,文章可以带缩略图,...

    Spring使用Druid整合JdbcTemplate与FreeMarker实例 下载

    使用Spring JdbcTemplate+Druid数据源+FreeMarker 开发的代码生成器。 您可以根据自己的实际,修改一下FreeMarker的模版文件,直接按目录生成Java代码。 生成了就能用,节省大量重复工作的时间。 您也可以用来学习...

    本科毕业设计,基于Java-web开发的内容管理系统(java cms),使用SpringBoot、vue、MyBatis等技术

    网站前台模板位于/src/main/webapp/templates目录,使用Freemarker技术。通过修改模板文件,可以完全控制网站页面显示的内容。 后端技术 Spring Boot:提供了对Spring开箱即用的功能。简化了Spring配置,提供自动...

    基于Springboot+Freemarker+Mysql实现的在线电影订票网站源码+文档说明+数据库

    开发工具: Eclipse + JDK1.8 + Tomcat8 + Mysql 技术栈: 后端Springboot,前端Freemarker,jquery异步通信,基于拦截器角色权限管理 电影订票功能需求: 前端: 1、电影展示、排序、评价 2、电影院展示、评价 3、...

    spring-boot项目示例学习demo-66套.zip

    该项目已成功集成 actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、Beetl(模板引擎)、Enjoy...

    spring boot 实践学习案例,与其它组件整合

    - Spring Boot 模板,包括thymeleaf、freemarker、jsp、表单校验 等。 - springboot-docs - Spring Boot 文档生成工具,包括 Swagger、Spring RestDocs - springboot-bussiness - Spring Boot 业务应用,包括...

    【SpringBoot】四、SpringBoot中整合Freemarker

    FreeMarker 是一个很值得去学习的模版引擎。它是基于模板文件生成其他文本的通用工具。 本文主要介绍在 SpringBoot 中如何整合 FreeMarker,一起来看看吧!!! 1、引入 Freemarker 依赖 org.springframework.boot...

    一个基于Springboot 的 毕设 博客学习项目,包括消息通知 群聊 搜索引擎 安全 非常值得学习

    eblog是一个基于Springboot2.1.2开发的博客学习项目,为了让项目融合更多的知识点,达到学习目的,编写了详细的从0到1开发文档。 项目演示: 演示地址:http://www.markerhub.com:8082 包括:自定义Freemarker标签,...

    基于SpringBoot和SpringCloud的精品课程在线学习平台设计源码

    项目共包含680个文件,其中JavaScript源代码文件146个,Java源代码文件115个,LESS样式文件71个,Vue组件文件60个,TypeScript源代码文件59个,XML配置文件41个,FreeMarker模板文件ftl 22个,Beetl模板文件btl 22个...

    springboot学习

    chapter3-1-3:使用Freemarker模板引擎渲染web视图 chapter3-1-4:使用Velocity模板引擎渲染web视图 chapter3-1-5:使用Swagger2构建RESTful API chapter3-1-6:统一异常处理 chapter3-1-7:使用Java 8中LocalDate等...

    基于SpringBoot开发的校内信息共享平台源码+项目说明.zip

    前端使用LayUI框架 + freemarker动态模板生成 数据库使用MySQL MVC三层架构 【备注】 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的Java学习者。 也可作为课程设计、期末大作业。包含:项目源码、...

    FreeMarker 手册

    第一部分 模板开发指南 ................................................................................................... 9 第一章 模板开发入门 ...........................................................

    FreeMarker中文指导手册

    第一部分 模板开发指南 ................................................................................................... 9 第一章 模板开发入门 ...........................................................

Global site tag (gtag.js) - Google Analytics