基础工具类
1. string
- 截取字符串(左闭右开)
?substring(start, end)
- 首字母小写/大写
?uncap_first / ?cap_first
- 字幕转小写/大写
?lower_case / upper_case
- 获取字符串长度
?length
- 起始、结尾(boolean类型)
?starts_with(“xx”)?string / ends_with
- 获取指定字符的索引
?index_of(“xx”)
- 去除字符串前后空格
?trim
- 替换指定字符串
?replace(“xx”,”yy”)
null&默认值
! 指定趋势变量的默认值${value!}
如果value为空,则默认值是空字符串
${value!"gaoxizhi"}
如果value为空,则使用默认值(gaoxizhi)
?? 判断变量是否存在
如果变量存在,返回true(boolean类型),否则返回false${(value??)?c}
3. 序列
序列包括:数组、List、Set
通过list指令输出序列
<#list 序列名 as 元素名>
${元素内容}
<#/list>
常用操作
- 获取序列长度 ?size
- 序列下标 ?index
- 第一个元素 ?first
- 最后一个元素 ?last
排序
- 倒序输出 ?reverse
- 升序输出 ?sort
- 降序输出 ?sort?reverse
- 指定字段名排序 ?sort_by(“字段名”)
- 一般是JavaBean集合,对应的字段名需要提供get方法
4. hash类型
list指令迭代
// 获取map的key及key对应的value
<#list hash?keys as key>
${key} - ${hash[key]}
<#/list>
// 单独获取map中的value
<#list hash?values as value>
${value}
<#/list>
其他指令
1. assign自定义变量指令
使用assign指令可以创建一个新的变量,或者替换一个已经存在的变量。
<#assign str "hello">
${str} <br>
<#assign num = 1 names = ["zhangsan","lisi","zhaoliu"]>
${num} -- ${names?join("、")+"。"}
2. macro自定义指令
使用macro指令来自定义一些自定义指令相当于宏
。指令可以被多次使用,自定义指令中可以包含字符串,也可以包含内置指令。
自定义指令**
<#macro address>
© 1995-2020 The FreeMarker project. all rights reserved.
</#macro>
使用自定义指令
<@address></@address>
定一个多个参数的自定义指令
<#macro multiplicationTable rows space>
<#list 1..rows as i>
<#list 1..rows as j>
${j} * ${i} = ${j * i}
<#list 1..space as s>
<#/list>
<#/list>
<br>
</#list>
<#/macro>
使用方式
<@multiplicationTable rows=6 space2> </@multiplicationTable>
3. nested 占位指令
nested指令执行自定义指令开始和结束标签中间的模版片段。嵌套的片段可以包含模版中任意合法的内容。没使用一次指令就会包含一次指令输出。
<#macro nestedTest>
这是自定义指令的第一行。
<#nested>
<#nested>
</#macro>
<@nestedTest><h5>这是自定义指令附加的一行。</h5></@nestedTest>
4. import导入指令
import指令可以引入一个库。也就是说他创建了一个新的命名空间,然后在这个命名空间中执行给定路径的模版。可以使用引入的空间中的指令。multiplication-table.ftl
<#macro multiplicationTable rows space>
<#list 1..rows as i>
<#list 1..rows as j>
${j} * ${i} = ${j * i}
<#list 1..space as s>
<#/list>
<#/list>
<br>
</#list>
<#/macro>
在另一个文件中通过import导入multiplication-table.ftl的命名空间,使用该命名空间的指令。
<#import "multiplication-table.ftl" as cfbUtil>
<@cfbUtil.multiplicationTable rows =8 space=2></@cfbUtil.multiplicationTable>
5. include包含指令
可以使用include指令在你的模版中插入另外一个FreeMarker模版文件。被包含模版的输出格式是在include标签出现的位置插入的。被包含的文件和包含他的模版共享变量,比frame更强一些,就像一个文件一样。
<#include "header.html">
<#include "header.ftlh">
<#include "info.txt">
6. function方法变量
创建一个方法变量(在当前命名空间中,如果你知道命名空间的特性)。这个指令和macro指令的工作方式一样,除了return指令必须又一个参数来指定方法的返回值,而且视图写入输出的将会被忽略。如果到达</#function>也没有执行return returnValue,那么方法的返回值就是未定义变量。
<#function name param1 param2=2 ... paramN>
...
<#return returnVlue>
</#function>
成员简明
- name:方法变量名称(不是参数变量)
- param1,param2… :方法参数(非表达式,是局部变量),在
=号
后面可以设置默认值 - paramN:可选的表示最后一个参数,意味着宏接收可变的参数数量,局部变量paramN将是额外参数的序列。
- returnValue:计算方法调用值的表达式
注意事项
- return指令可以多次使用
- 没有默认值的参数必须在有默认值的参数之前
freeMarker页面静态化
通过上述介绍可知freeMarker是一种基于模版的、用来生成输出文本的通用工具,所以我们可以使用他制定符合自己业务的模版,然后生成自己的html页面。freeMarker是通过freemarker.template.Configuration这个对象对模版进行加载的(他也处理创建和缓存与解析模版的工作),然后我们通过getTemplate方法获得你想要的模版,有一点要记住freemarker.template.Configuration在你的整个应用必须保证唯一实例。
<#-- 新闻标题 -->
<h1>${title}</h1>
<p>
新闻来源:${source} 发布时间:${puTime?string("yyyy-MM-dd HH:mm")}
</p>
<#-- 新闻内容 -->
<p>
${content}
</p>