ftl指令常用标签及语法(代码片段)

liudj liudj     2023-01-03     133

关键词:

FTL指令常用标签及语法

注意:使用freemaker,要求所有标签必须闭合,否则会导致freemaker无法解析。

freemaker注释:<#-- 注释内容 -->格式部分,不会输出

---------------------------------- 基础语法 ----------------------------------

1、字符输出

$emp.name?if_exists      // 变量存在,输出该变量,否则不输出
$emp.name!            // 变量存在,输出该变量,否则不输出

$emp.name?default("xxx")     // 变量不存在,取默认值xxx 
$emp.name!"xxx"          // 变量不存在,取默认值xxx

 

常用内部函数:

$"123<br>456"?html      // 对字符串进行HTML编码,对html中特殊字符进行转义
$"str"?cap_first        // 使字符串第一个字母大写 
$"Str"?lower_case        // 将字符串转换成小写 
$"Str"?upper_case        // 将字符串转换成大写
$"str"?trim              // 去掉字符串前后的空白字符

 

字符串的两种拼接方式拼接:

$"hello$emp.name!"     // 输出hello+变量名
$"hello"+emp.name!       // 使用+号来连接,输出hello+变量名

 

可以通过如下语法来截取子串:

<#assign str = "abcdefghijklmn"/>

// 方法1
$str?substring(0,4)  // 输出abcd

// 方法2
$str[0]$str[4]    // 结果是ae
$str[1..4]        // 结果是bcde

// 返回指定字符的索引
$str?index_of("n")

2、日期输出

$emp.date?string(‘yyyy-MM-dd‘) //日期格式

3、数字输出(以数字20为例)

$emp.name?string.number     // 输出20
$emp.name?string.currency    // ¥20.00 
$emp.name?string.percent     // 20%
$1.222?int            // 将小数转为int,输出1

<#setting number_format="percent"/>    // 设置数字默认输出方式(‘percent‘,百分比)
<#assign answer=42/>             // 声明变量 answer 42
#answer             // 输出 4,200%
$answer?string         // 输出 4,200%
$answer?string.number   // 输出 42
$answer?string.currency  // 输出 ¥42.00
$answer?string.percent  // 输出 4,200%
#answer            // 输出 42
数字格式化插值可采用#expr;format形式来格式化数字,其中format可以是:
mX:小数部分最小X位
MX:小数部分最大X位
如下面的例子:
<#assign x=2.582/>
<#assign y=4/>
#x; M2    // 输出2.58
#y; M2    // 输出4
#x; m2    // 输出2.58
#y; m2    // 输出4.0
#x; m1M2  // 输出2.58
#x; m1M2  // 输出4.0

 

4、申明变量

<#assign foo=false/> // 声明变量,插入布尔值进行显示,注意不要用引号
$foo?string("yes","no") // 当为true时输出"yes",否则输出"no"

申明变量的几种方式

<#assign name=value> 
<#assign name1=value1 name2=value2 ... nameN=valueN> 
<#assign same as above... in namespacehash>

<#assign name> 
capture this 
</#assign>

<#assign name in namespacehash> 
capture this 
</#assign>

5、比较运算符

表达式中支持的比较运算符有如下几个:
= 或 == :判断两个值是否相等.
!= :判断两个值是否不等.
> 或 gt :判断左边值是否大于右边值
>= 或 gte :判断左边值是否大于等于右边值
< 或 lt :判断左边值是否小于右边值
<= 或 lte :判断左边值是否小于等于右边值

6、算术运算符

FreeMarker表达式中完全支持算术运算,
FreeMarker支持的算术运算符包括:+, - , * , / , %
注意:
(1)、运算符两边必须是数字
(2)、使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:$3 + "5",结果是:35

7、逻辑运算符

逻辑运算符有如下几个:
逻辑与:&&
逻辑或:||
逻辑非:!
逻辑运算符只能作用于布尔值,否则将产生错误

8、FreeMarker中的运算符优先级如下(由高到低排列):

①、一元运算符:!
②、内建函数:?
③、乘除法:*, / , %
④、加减法:- , +
⑤、比较:> , < , >= , <= (lt , lte , gt , gte)
⑥、相等:== , = , !=
⑦、逻辑与:&&
⑧、逻辑或:||
⑨、数字范围:..
实际上,我们在开发过程中应该使用括号来严格区分,这样的可读性好,出错少

9、if 逻辑判断(注意:elseif 不加空格)

<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
<#else>
...
</#if>

if 空值判断

// 当 photoList 不为空时
<#if photoList??>...</#if> 

//值得注意的是,$..只能用于文本部分,不能用于表达式,下面的代码是错误的:
<#if $isBig>Wow!</#if>
<#if "$isBig">Wow!</#if>

// 正确写法
<#if isBig>Wow!</#if> 

 

10、switch (条件可为数字,可为字符串)

<#switch value> 
<#case refValue1> 
....
<#break> 
<#case refValue2> 
....
<#break> 
<#case refValueN> 
....
<#break> 
<#default> 
.... 
</#switch>

11、集合 & 循环

// 遍历集合:
<#list empList! as emp> 
    $emp.name!
</#list>

// 可以这样遍历集合:
<#list 0..(empList!?size-1) as i>
    $empList[i].name!
</#list>

// 与jstl循环类似,也可以访问循环的状态。

empList?size    // 取集合的长度
emp_index:     // int类型,当前对象的索引值 
emp_has_next:     // boolean类型,是否存在下一个对象

// 使用<#break>跳出循环
<#if emp_index = 0><#break></#if>

// 集合长度判断 
<#if empList?size != 0></#if> // 判断=的时候,注意只要一个=符号,而不是==

<#assign l=0..100/>    // 定义一个int区间的0~100的集合,数字范围也支持反递增,如100..2
<#list 0..100 as i>   // 等效于java for(int i=0; i <= 100; i++)
  $i
</#list>

// 截取子集合:
empList[3..5] //返回empList集合的子集合,子集合中的元素是empList集合中的第4-6个元素

// 创建集合:
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>

// 集合连接运算,将两个集合连接成一个新的集合
<#list ["星期一","星期二","星期三"] + ["星期四","星期五","星期六","星期天"] as x>

// 除此之外,集合元素也可以是表达式,例子如下:
[2 + 2, [1, 2, 3, 4], "whatnot"]

// seq_contains:判断序列中的元素是否存在
<#assign x = ["red", 16, "blue", "cyan"]> 
$x?seq_contains("blue")?string("yes", "no")    // yes
$x?seq_contains("yellow")?string("yes", "no")  // no
$x?seq_contains(16)?string("yes", "no")        // yes
$x?seq_contains("16")?string("yes", "no")      // no

// seq_index_of:第一次出现的索引
<#assign x = ["red", 16, "blue", "cyan", "blue"]> 
$x?seq_index_of("blue")  // 2

// sort_by:排序(升序)
<#list movies?sort_by("showtime") as movie></#list>

// sort_by:排序(降序)
<#list movies?sort_by("showtime")?reverse as movie></#list>

// 具体介绍:
// 不排序的情况:
<#list movies as moive>
  <a href="$moive.url">$moive.name</a>
</#list>

//要是排序,则用
<#list movies?sort as movie>
  <a href="$movie.url">$movie.name</a>
</#list>

// 这是按元素的首字母排序。若要按list中对象元素的某一属性排序的话,则用
<#list moives?sort_by(["name"]) as movie>
  <a href="$movie.url">$movie.name</a>
</#list>

//这个是按list中对象元素的[name]属性排序的,是升序,如果需要降序的话,如下所示:
<#list movies?sort_by(["name"])?reverse as movie>
  <a href="$movie.url">$movie.name</a>
</#list>

12、Map对象

// 创建map
<#assign scores = "语文":86,"数学":78>

// Map连接运算符
<#assign scores = "语文":86,"数学":78 + "数学":87,"Java":93>

// Map元素输出
emp.name       // 全部使用点语法
emp["name"]    // 使用方括号

13、FreeMarker支持如下转义字符:

" :双引号(u0022)
‘ :单引号(u0027)
\ :反斜杠(u005C)
:换行(u000A)
:回车(u000D)
:Tab(u0009)
 :退格键(u0008)
f :Form feed(u000C)
l :<
g :>
a :&

xCode :直接通过4位的16进制数来指定Unicode码,输出该unicode码对应的字符.

如果某段文本中包含大量的特殊符号,FreeMarker提供了另一种特殊格式:可以在指定字符串内容的引号前增加r标记,在r标记后的文件将会直接输出.看如下代码:
$r"$foo" // 输出 $foo
$r"C:/foo/bar" // 输出 C:/foo/bar

14、include指令

// include指令的作用类似于JSP的包含指令:
<#include "/test.ftl" encoding="UTF-8" parse=true>

// 在上面的语法格式中,两个参数的解释如下:
encoding="GBK"  // 编码格式
parse=true    // 是否作为ftl语法解析,默认是true,false就是以文本方式引入,注意:在ftl文件里布尔值都是直接赋值的如parse=true,而不是parse="true"

15、import指令

// 类似于jsp里的import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件
<#import "/libs/mylib.ftl" as my>
// 上面的代码将导入/lib/common.ftl模板文件中的所有变量,交将这些变量放置在一个名为com的Map对象中,"my"在freemarker里被称作namespace

17、compress 压缩

// 用来压缩空白空间和空白的行 
<#compress> 
    ... 
</#compress>
<#t> // 去掉左右空白和回车换行 

<#lt>// 去掉左边空白和回车换行 

<#rt>// 去掉右边空白和回车换行 

<#nt>// 取消上面的效果

18、escape,noescape 对字符串进行HTML编码

// escape指令导致body区的插值都会被自动加上escape表达式,但不会影响字符串内的插值,只会影响到body内出现的插值,使用escape指令的语法格式如下:
<#escape x as x?html> 
  First name: $firstName 
<#noescape>Last name: $lastName</#noescape> 
  Maiden name: $maidenName 
</#escape>

// 相同表达式
First name: $firstName?html 
Last name: $lastName 
Maiden name: $maidenName?html

---------------------------------- 高级语法 ----------------------------------

1、global全局赋值语法

<#global name=value> 

<#global name1=value1 name2=value2 ... nameN=valueN> 

<#global name> 
  capture this 
</#global>

// 利用这个语法给变量赋值,那么这个变量在所有的namespace中是可见的,如果这个变量被当前的assign语法覆盖如<#global x=2><#assign x=1>在当前页面里x=2将被隐藏,或者通过$.globals.x 来访问

 

2、setting 语法

// 用来设置整个系统的一个环境 
locale // zh_CN 中文环境
number_format 
boolean_format 
date_format , time_format , datetime_format 
time_zone 
classic_compatible
// 例1:
<#setting number_format="percent"/>    // 设置数字默认输出方式(‘percent‘,百分比)

// 例2:
// 假如当前是匈牙利的设置,然后修改成美国
$1.2 // 输出1,2
<#setting locale="en_US"> 
$1.2 // 输出1.2,因为匈牙利是采用", "作为十进制的分隔符,美国是用". "

3、macro宏指令

例子1:

<#-- 定义宏 -->
<#macro test foo bar="Bar" baaz=-1> 
  Text: $foo, $bar, $baaz
</#macro>

<#-- 使用宏 -->
<@test foo="a" bar="b" baaz=5*5/>  // 输出:Text: a, b, 25
<@test foo="a" bar="b"/>        // 输出:Text: a, b, -1
<@test foo="a" baaz=5*5-2/>     // 输出:Text: a, Bar, 23
<@test foo="a"/>                   // 输出:Text: a, Bar, -1

例子2:

<#-- 定义一个循环输出的宏 -->
<#macro list title items> 
  $title
  <#list items as x>
    *$x
  </#list> 
</#macro> 

<#-- 使用宏 -->
<@list items=["mouse", "elephant", "python"] title="Animals"/>
// 输出Animals *mouse *elephant *python

例子3:

<#-- 嵌套宏 -->
<#macro border>
  <table>
    <#nested>
  </table>
</#macro>

<#-- 嵌套宏使用 -->
<@border>
  <tr><td>hahaha</td></tr>
</@border> 
输出结果:
<table>
  <tr><td>hahaha</td></tr>
</table>

 

例子4:在nested指令中使用循环变量时,可以使用多个循环变量,看如下代码:

<#-- 循环嵌套宏 -->
<#macro repeat count>
  <#list 1..count as x>
    <#nested x, x/2, x==count> // 使用nested指令时指定了三个循环变量
  </#list>
</#macro>

<#-- 使用宏 -->
<@repeat count = 4; c, halfc, last>
  $c. $halfc<#if last> Last!</#if>
</@repeat>
// 输出结果:
// 1. 0.5
// 2. 1
// 3. 1.5
// 4. 2 Last!

freemarker 宏嵌套nested 的使用:
http://blog.sina.com.cn/s/blog_7e5699790100z59g.html


4、结束macro指令

// return指令用于结束macro指令
<#-- 创建宏 -->
<#macro book>
  spring
  <#return>
  j2ee
</#macro>

<#-- 使用宏 -->
<@book />
// 上面的代码输出:spring,而j2ee位于return指令之后,不会输出.

--------------------- 本文来自 Duke_Cui 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/pengpengpeng85/article/details/52070602?utm_source=copy 
























vue指令数据及事件绑定条件和列表渲染(代码片段)

文章目录Vue指令内容渲染指令属性绑定指令事件绑定指令双向绑定指令条件渲染指令列表渲染指令Vue指令指令(Directives)是vue为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构。注意:指令是vue开发... 查看详情

mybatis常用标签(代码片段)

mybatis是在日常开发中最常用的orm框架,所以熟练使用mybatis是必须掌握的技能,那么本篇文章将总结所有在开发中常用的标签。1.select标签select表示为查询语法。2.insertinsert表示为插入语法。3.updateupdate表示为修改语法。4.d... 查看详情

freemarker标签使用(代码片段)

.....格式的部分,将使用数据模型中的部分替代输出 ④FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。1.FTL指令规则   FreeMarker有三种FTL标签,这和HTML的标签是完全类似的    开... 查看详情

freemarker教程-模板开发手册(代码片段)

...reemarker的基本概念,介绍基本的FTL术语及内置函数,内置指令,方便作为开发手册速查(文中演示所用版本为2.3.30,实际使用中请根据自己项目版本自查官网)。本文不会罗列官网API,只在必要时演示其语法,代码工程中有课代... 查看详情

ftl语法(代码片段)

freemaker注释:<#--注释内容-->格式部分,不会输出。1、字符输出 $emp.name?if_exists      //变量存在,输出该变量,否则不输出 $emp.name!          //变量存在,输出该变量,否则不输出   $emp.nam... 查看详情

linux学习帮助指令及目录文件类指令(代码片段)

帮助指令基本语法man[命令或配置文件](功能描述:获取帮助功能)应用查看ls命令的帮助信息manlshelphelpcd目录类指令pwd显示当前工作的绝对目录ls遍历目录ls[选项][目录或文件]选项-a:显示当前的文件和目录,包括... 查看详情

vue--常用指令(代码片段)

安装官网:https://cn.vuejs.org/下载:https://cn.vuejs.org/v2/guide/installation.html直接通过script在head标签里导入就可以了<scriptsrc="../static/vue.min.js"></script>或者通过CDN的方式直接引用<scriptsrc="https://cdn.jsdelivr.net/npm/vue"></script&g... 查看详情

1.vue模板语法有2大类(插值语法和指令语法)(代码片段)

...js表达式,且可以直接读取到data中的所有属性。 2.指令语法: 功能:用于解析标签(包括:标签属性、标签体内容、绑定事件. 查看详情

web前端——html常用标签及属性(代码片段)

html常用的标题等标签就不记录了,只记录一下比较少见的标签以及属性表格tabletd单元格tr表的行th表头td或th可以下面的两个属性达到跨行或跨列表格跨行rowspan表格跨列colspan例子:<!--cellspacing单元格间距cellpadding单元格边距--&g... 查看详情

微信小程序常用api及语法(代码片段)

小程序ApiApp全局入口,整个小程序项目中,只允许有一个App入口函数。全局数据globalData:写在全局的js里使用this.globalData.data私有的生命周期【全局的生命周期】onLaunch:初始化函数onShow:启动或切换前台onHide:小程序后台运行... 查看详情

vue3.2基础及常用方法(代码片段)

...:volar配置用户代码片段可以快速输入vue3模板1.css支持v-bind指令:<template><divclass="box">color</div></template><scriptsetup>importreffrom'vue'letcolor=ref('red')</script><stylescoped>.boxwidth:100px;height:5... 查看详情

markdown常用语法全纪录(代码片段)

MarkDown常用语法记录一、设置标题1.通过“#”设置#一级标题##二级标题###三级标题####四级标题2.通过“=”和“-”设置一级标题=======二级标题-------要注意的是使用这种语法格式,只能设置一级标题与二级标题二、换行1.空格加回... 查看详情

13.django中几大常用模板标签讲解及实战使用for循环;if判断;页面跳转;开启关闭自动转义;url携带参数传递;注释(代码片段)

1.常用模板标签(1)模板标签重要概念:①定义:标签在渲染的过程中提供任意的逻辑。②标签语法:由%和%来定义的,例如:%tag%%endtag% (2)常用模板标签讲解及实战使用:第一个——模板标签中... 查看详情

13.django中几大常用模板标签讲解及实战使用for循环;if判断;页面跳转;开启关闭自动转义;url携带参数传递;注释(代码片段)

1.常用模板标签(1)模板标签重要概念:①定义:标签在渲染的过程中提供任意的逻辑。②标签语法:由%和%来定义的,例如:%tag%%endtag% (2)常用模板标签讲解及实战使用:第一个——模板标签中... 查看详情

django--基础--djangoorm常用查询语法及进阶(代码片段)

目录一般操作必知必会13条单表查询之神奇的双下划线ForeignKey操作正向查找反向操作ManyToManyFieldclassRelatedManager聚合查询和分组查询聚合分组F查询和Q查询F查询Q查询锁和事务锁事务其他鲜为人知的操作(有个印象即可)DjangoORM执... 查看详情

freemarker语法(代码片段)

...编写用于生成JavaBean的ftl文件。在此记录下使用Freemarker的常用语法FreeMarkerJava使用实例化FreeMarke 查看详情

shell脚本简介及常用文本编辑命令(代码片段)

什么是脚本?脚本简单地说是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的,可以通过记事本打开和编辑为什么要学习和使用shellshell属于内置脚本程序开发的效率非常高,依赖于功能强大的命令可以迅速... 查看详情

freemarker之ftl指令(代码片段)

assign指令此指令用于在页面上定义一个变量(1)定义简单类型:<#assignlinkman="周先生">联系人:$linkman(2)定义对象类型:<#assigninfo="mobile":"13301231212",‘address‘:‘北京市昌平区王府街‘>电话:$info.mobile地址:$info.address... 查看详情