一、概念

Freemarker是一款模板引擎,并用来输出文本,网页或配置文件等。

二、语法

2.1 注释

<!-- 在页面可以看的到 -->
<#-- 在页面看不到 -->

2.2 数据类型


布尔类型boolean

不能直接输出,需要转换成字符串,用c转换。

后端返回msg=true
# 错误
${msg}
# 正确
方法一: ${msg?c}
方法二: ${msg?string}
方法三: ${msg?string('是字符串','不是字符串')}
输出
true
true
是字符串

日期类型date

不能直接输出,需要转换成字符串,用c转换。

数值类型

等于java中的int,float,double等类型。

字符串类型

等于java中的字符串。

空值处理

不存在会报错,null也会报错,

解决:传空字符串"",加感叹号{msg!}

sequence类型

等于java中的数组list,set类型。

# 遍历集合
<#list 序列名 as 元素名>
${元素名}
</#list>

hash类型

等于java的Map类型。

# key遍历,获取key和key对应的value
<#list hash?key as key>
${key}---${hash[key]}
</#list>
# value遍历,直接获取value
<#list hash?values as value>
{value}
</#list>

2.3 常用指令

自定义变量assign

# 定义单个
<#assign str = "hello">
#{str}
</#assign>
# 定义多个,根据逗号分割成字符串
<#assign name = "qinag" names=["强1","强2","强3"]>
#{str}
#{names?join(',')}
</#assign>

条件控制语句if...elseif...else

# 格式
<#if 条件1>
...
<#ifelse 条件2>
...
<#ifelse 条件3>
...
<#else>
...
<#/if>
# 条件不为空时才遍历
<#if 序列名??>
<#list 序列名 as 元素名>
${元素名}
</#list>
</#if>
<#list 序列名 as 元素名>
${元素名}
<#else>
没有条件时执行这部分语句
</#list>

三、自定义指令

可以使用macro定义,可以传参,可以重复使用。

3.1 自定义指令

<#macro phone>
18912354231
</#macro>

使用自定义指令

<@phone></@phone>

3.2 自定义指令传参

<#macro queryByName name passwd>
根据用户名查询 - ${name}
密码是 - ${passwd}
</#macro>

使用自定义传参指令

<@queryByName name='admin' passwd='123456'></@queryByName>

3.3 nested占位指令

<#macro test>
这是一段文本
<#nested>
</#macro>

使用nested占位指令

<@test>xxxxxx</@test>

则优先显示“这是一段文本”

四、导入指令

4.1 import

import指令可以导入一个库,它创建一个新的命名空间,然后在那个命名空间中执行给定路径的模板,可以使用引入空间的指令。

commons.ftl

<#maro cfb>
QQ: 875667601
</#maro>

test.ftl

<#-- 导入命名空间 -->
<#import "commons.ftl" as common>
<#-- 使用导入的命名空间 -->
<@common.cfb></@common.cfb>

4.2 include

include包含指令。

可以使用include指令在模板中插入另外一个模板,被包含的模板输出在include的位置上,像是复制进去了一样。

<#include "test.ftl">
<#include "test.txt">
<#include "test.html">

五、运算符

5.1 算数运算符

# 加 减 乘 除 取模
+ - * / %

5.2 逻辑运算符

# 与 或 非
&& || !

5.3 比较运算符

# 大于 小于 等于 大于等于 小于等于 不等于
>(gt)
<(lt)
=
>=(gte)
<=(lte)
!=

5.4 空值运算符

# 判断是否为空,返回布尔类型
??
${(name??)?string}
# 如果为空,设置默认值
@
${name! '小强'}

作者(Author):小强崽

来源(Source):https://www.wuduoqiang.com/archives/Freemarker基本语法

协议(License):署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)

版权(Copyright):商业转载请联系作者获得授权,非商业转载请注明出处。 For commercial use, please contact the author for authorization. For non-commercial use, please indicate the source.

Freemarker基本语法的更多相关文章

  1. FreeMarker模板语法

    四.FreeMarker模板语法 要编写复杂的模板需要熟悉FreeMarker语法规则,官网有详细说明,中文帮助也比较详细了,下面这些内容是从网上收罗来的,感谢网友的分享,经过整理与修改的内容如下.建 ...

  2. FreeMarker常用语法

    转自:http://www.cnblogs.com/linjiqin/p/3388298.html FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{exp ...

  3. freemarker常见语法大全

    推荐freemarker系列教程:http://swiftlet.net/archives/category/freemarker FreeMarker的插值有如下两种类型:1,通用插值${expr} ...

  4. 网页静态化解决方案-Freemarker demo+语法

    1.网页静态化技术Freemarker 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说 ...

  5. freemarker常见语法大全,灰常有用!

    由于公司前端使用的技术是freemarker,于是没事就在网上看看别人写的关于freemarker的文章,感觉freemarker灰常简单,比jsp好用,jsp太乱太臃肿了,另外推荐大家看看freem ...

  6. FreeMarker基础语法,宏,引用 等

    FreeMarker的插值有如下两种类型: 1,通用插值${expr}; 2,数字格式化插值:#{expr}或#{expr;format} ${book.name?if_exists } //用于判断 ...

  7. FreeMarker基本语法的使用

    参考博客: http://www.cnblogs.com/panchanggui/p/9346574.html https://blog.csdn.net/zyy88886666/article/de ...

  8. FreeMarker常用语法学习

    1.API网址 http://freemarker.sourceforge.net/docs/ 2.一个Table的例子 freemarker 对表格的控制 这里将所有需要在一个区域显示到数据全部ad ...

  9. freemarker常见语法

    FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}  ${basketball.name?if_exists } / ...

随机推荐

  1. 一款不错的 Go Server/API boilerplate,使用 K8S+DDD+CQRS+ES+gRPC 最佳实践构建

    Golang API Starter Kit 该项目的主要目的是使用最佳实践.DDD.CQRS.ES.gRPC 提供样板项目设置. 为开发和生产环境提供 kubernetes 配置.允许与反映生产的 ...

  2. 远程连接Linux上的MongoDB服务

    1.Linux环境上安装好MongoDB,并配置好环境变量 2.启动MongoDB 注:mongod /opt/michael/mongodb/mongodb-linux-x86_64-4.0.5/d ...

  3. 11. Linux从入门到进阶

    课程大纲 • Linux简介 • Linux基础 • Linux常用命令 • Shell编程&awk

  4. 自动执行文件夹中的py文件

    写一个函数,接收一个地址,执行其中的py文件,包括子文件.path.endswith('.py') 判断以'.py'结尾,是什么类型的文件.os.system('python %s'%path) 模拟 ...

  5. 关于如何在mysql中插入一条数据后,返回这条数据的id

    简单的总结一下如何在mysql中出入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetI ...

  6. 【Mysql】InnoDB 中的聚簇索引、二级索引、联合索引

    接上一篇内容. 一.聚簇索引 其实之前内容中介绍的 B+ 树就是聚簇索引. 这种索引不需要我们显示地使用 INDEX 语句去创建,InnoDB 引擎会自动创建.另外,在 InnoDB 引擎中,聚簇索引 ...

  7. Delimiter must not be alphanumeric or backslash php报错原因

    昨天写了一个小程序,其中用到了正则表达式去匹配内容.  php源代码如下: preg_match("\b(\w+)\b\s+\1\b",$match):   此报错警告的中文意思是 ...

  8. Geoserver通过ajax跨域访问服务数据的方法(含用户名密码认证的配置方式)

    Goeserver数据有两种,一种需进行用户密码的权限认证,一种无须用户密码.对于网上跨域访问Geoserver数据的种种方法,对这2种数据并非通用. 笔者将Geoserver官方下载的Geoserv ...

  9. video标签的视频全屏

    按钮: <div class="fullScreen" @click="fullScreen"><i class="el-icon- ...

  10. JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)

    检测漏洞 工具 下载地址:https://github.com/joaomatosf/JavaDeserH2HC javac -cp .:commons-collections-3.2.1.jar E ...