数据模型
scalars标量:从根 root 开始指定它的路径,每级之间用点来分隔。
如:whatnot.fruits
sequences 序列:使用数组的方括号方式来访问一个序列的子变量。
如:animals[0].name,whatnot.fruits[1]
总结:
数据模型可以被看做是树状结构的。
标量存储单一的值,这种类型的值可以是字符串,数字,日期/时间或者是布尔值。
哈希表是存储变量和与其相关且有唯一标识名称变量的容器。
序列是存储有序变量的容器。存储的变量可以通过数字索引来检索,索引通常从零开始。
模板
${…}:FreeMarker 将会输出真实的值来替换花括号内的表达式,这样的表达式被称为interpolations 插值.
FTL tags 标签(FreeMarker 模板的语言标签):它们是 FreeMarker 的指令而且是不会直接输出出来的东西。这些标签的使用一般以符号#开头。(用户自定义的 FTL 标签使用@符号来代替#)
Comments 注释:FreeMarker 的注释和 HTML 的注释相似,但是它用<#--和-->来分隔的。任何介于这两个分隔符(包含分隔符本身)之间内容会被 FreeMarker 忽略,就不会输出出来了。
directives 指令:就是所指的 FTL 标签。这些指令在 HTML 的标签(如<table>和</table>)和 HTML 元素(如 table 元素)中的关系是相同的。(如果现在你还不能区分它们,那么把“FTL 标签”和“指令”看做是同义词即可。)
指令示例
1 if 指令
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>
Welcome ${user}<#if user == "Big Joe">, our beloved
leader</#if>!
</h1>
<p>Our latest product:
<a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>
我们来详细说说 condition (条件判断)的使用:==是来判断在它两侧的值相等的操作符,比较的结果是布尔值,true 或者 false。在==的左侧,是引用的变量,我们很熟悉这样的语法,它会被变量的值来替代。右侧是指定的字符串,在模板中的字符串必须放在引号内。
使用<#else>标签可以指定当条件为假时程序执行的内容。
<#if animals.python.price < animals.elephant.price>
Pythons are cheaper than elephants today.
<#else>
Pythons are not cheaper than elephants today.
</#if>
如果变量本身就是布尔值(true 或者 false),那么可以直接让其作为 if 的条件
condition:
<#if animals.python.protected>
Warning! Pythons are protected animals!
</#if>
2 list 指令
当需要用列表来遍历集合的内容时,list 指令是非常好用的。例如,如果在模板中用前面示例描述序列的数据模型。
<p>We have these animals:
<table border=1>
<tr><th>Name<th>Price
<#list animals as being>
<tr><td>${being.name}<td>${being.price} Euros
</#list>
</table>
list 指令的一般格式为:
<#list sequence as loopVariable>repeatThis</#list>
repeatThis 部分将会在给定的 sequence 遍历时在每项中重复,从第一项开始,一个接着一个。在所有的重复中,loopVariable 将持有当前项的值。这个循环变量仅存在于<#list …>和</#list>标签之间。
3 include 指令
使用 include 指令,我们可以在当前的模板中插入其他文件的内容。
假设要在一些页面中显示版权声明的信息。那么可以创建一个文件来单独包含版权声明,之后在需要它的地方插入即可。比方说,我们可以将版权信息单独存放在页面文件copyright_footer.html 中。
<hr>
<i>
Copyright (c) 2000 <a href="http://www.acmee.com">Acmee
Inc</a>,
<br>
All Rights Reserved.
</i>
当需要用到这个文件时,可以使用 include 指令来实现插入。
<html>
<head>
<title>Test page</title>
</head>
<body>
<h1>Test page</h1>
<p>Blah blah...
<#include "/copyright_footer.html">
</body>
</html>
4 联合使用指令
<p>We have these animals:
<table border=1>
<tr><th>Name<th>Price
<#list animals as being>
<tr>
<td>
<#if being.size == "large"><font size="+1"></#if>
${being.name}
<#if being.size == "large"></font></#if>
<td>${being.price} Euros
</#list>
</table>
5 处理不存在的变量
不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况,通过在变量名后面跟着一个!和默认值。就像下面的例子,当 user 从数据模型中丢失时,模板将会将user 的值表示为字符串”Anonymous”。(若 user 并没有丢失,那么模板就会表现
出”Anonymous”不存在一样):
<h1>Welcome ${user!"Anonymous"}!</h1>
当然也可以在变量名后面通过放置??来询问 FreeMarker 一个变量是否存在。将它和 if指令合并,那么如果 user 变量不存在的话将会忽略整个问候代码段:
<#if user??><h1>Welcome ${user}!</h1></#if>
关于多级访问的变量,比如 animals.python.price ,书写代码:animals.python.price!0,仅当 animals.python 存在而仅仅最后一个子变量 price 可能不存在(这种情况下我们假设价格是 0)。如果 animals 或者 python不存在,那么模板处理过程将会以“未定义的变量”错误而停止。为了防止这种情况的发生,可以这样来书写代码(animals.python.price)!0。这种情况下当
animals 或
python 不存在时表达式的结果仍然是 0。对于??也是同样用来的处理这种逻辑的:
animals.python.price??对比(animals.python.price)??来看。
分享到:
相关推荐
Freemarker 模板开发 Freemarker 入门
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所...
第一章 模板开发入门 ............................................................................................. 10 1.1 简介 .............................................................................
〖课程介绍〗这是一篇网站原理课程,先介绍FreeMarker模板引擎的使用,然后以FreeMarker API为基础设计一个MVC框架,以此展开说明MVC框架的流程原理。演示平台:Eclipse EE ,FreeMarker 2.3 〖主要内容〗包含以下...
第一章 模板开发入门 ............................................................................................... 9 1.1 简介 ...........................................................................
3、超高的性能:Beetl 远超过主流 java 模板引擎性能,如 5-6 倍于 freemarker,2 倍于传统 jsp 技术。而且消耗较低的 CPU 4、易于整合:Beetl 能很容易的与各种 web 框架整合,如 Spring MVC,JFinal,Struts,Nutz...
初学者绝佳入门实例,展现web开发最主流框架:struts+hibernate+spring,使用前沿技术freemarker实现模板重用,使用FckEditor提供和word媲美的在线文本编辑功能。
第一章 模板开发入门 ............................................................................................... 9 1.1 简介 ............................................................................
第一章 模板开发入门 ............................................................................................... 9 1.1 简介 ............................................................................
3.4、使用Freemarker模板引擎渲染web视图 6 3.4.1、pom文件引入: 6 3.4.2、后台代码 6 3.4.3、前台代码 7 3.4.4、Freemarker其他用法 7 3.4.5、Freemarker配置 8 3.5、使用JSP渲染Web视图 8 3.5.1、pom文件...
处理FreeMarker模板 16 org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送...
FristFreeMarker demo 增删改查 完整的开发案例 包含jar包,sql文件,可直接运行,简单入门案例
J2eeFAST是一个Java EE企业级快速开发平台,基于经典技术组合(Spring Boot,Spring MVC,Apache Shiro,MyBatis-Plus,Freemarker,Bootstrap,AdminLTE)采用经典开发模式,让初学者能够Swift进行入门并从事在线...
但是最近总结小伙伴遇到的问题,感觉很多人对前后端分离开发还是两眼一抹黑,所以今天松哥想和大家聊一下前后端分离以及 Vue.js 的一点事,算是一个简单的入门科普吧。 前后端不分 后端模板:Jsp、FreeMarker、...
页面模板:Freemarker 缓存框架:Redis 数据库:mysql 消息队列:RabbitMq 分布式搜索:Elasticsearch 6.4.3 双工通讯协议:websocket 网络通讯框架:t-io 3.2.5 工具集合:hutool 4.1.17 知识要点: 基于mybatis ...
MVC 设计模式,快速入门,方便上手。 freemaker 模板引擎 springboot 版本升级后,默认suffix为.ftlh,以前版本是.ftl,所要注意配置 freemarker.suffix: .ftl 二次开发 & 技术交流 扫码备注: 'firefly', 环境要求 ...
3.3、使用Freemarker模板引擎渲染web视图 6 3.3.1、pom文件引入: 6 3.3.2、后台代码 6 3.3.3、前台代码 6 3.3.4、Freemarker其他用法 7 3.3.5、Freemarker配置 8 3.4、使用JSP渲染Web视图 8 3.4.1、pom文件...
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等...
进行Spring语言的介绍和讲解,模板语法和渲染(注意springboot1.5开始不支持velocity模板引擎,可以用Thymeleaf或者Freemarker代替) 数据库交互iBatis集成 主要是进行数据库的创建以及交互,讲解注释和XML定义并...
特征源类型(布局) 邮政页(您的自定义布局)模板引擎FreeMarker 速度(您的自定义Renderer模板引擎)源格式HTML-(* .html) Markdown-(* .md,* .markdown) 纺织-(*。纺织) WikiText-(* .textile,*。trac...