基础工具类

1. string

  1. 截取字符串(左闭右开) ?substring(start, end)
  2. 首字母小写/大写 ?uncap_first / ?cap_first
  3. 字幕转小写/大写 ?lower_case / upper_case
  4. 获取字符串长度 ?length
  5. 起始、结尾(boolean类型) ?starts_with(“xx”)?string / ends_with
  6. 获取指定字符的索引 ?index_of(“xx”)
  7. 去除字符串前后空格 ?trim
  8. 替换指定字符串 ?replace(“xx”,”yy”)

null&默认值

! 指定趋势变量的默认值
${value!} 如果value为空,则默认值是空字符串
${value!"gaoxizhi"} 如果value为空,则使用默认值(gaoxizhi)

?? 判断变量是否存在
如果变量存在,返回true(boolean类型),否则返回false
${(value??)?c}

3. 序列

序列包括:数组、List、Set
通过list指令输出序列

  1. <#list 序列名 as 元素名>
  2. ${元素内容}
  3. <#/list>

常用操作

  1. 获取序列长度 ?size
  2. 序列下标 ?index
  3. 第一个元素 ?first
  4. 最后一个元素 ?last

排序

  1. 倒序输出 ?reverse
  2. 升序输出 ?sort
  3. 降序输出 ?sort?reverse
  4. 指定字段名排序 ?sort_by(“字段名”)
    1. 一般是JavaBean集合,对应的字段名需要提供get方法

4. hash类型

list指令迭代

  1. // 获取mapkeykey对应的value
  2. <#list hash?keys as key>
  3. ${key} - ${hash[key]}
  4. <#/list>
  5. // 单独获取map中的value
  6. <#list hash?values as value>
  7. ${value}
  8. <#/list>

其他指令

1. assign自定义变量指令

使用assign指令可以创建一个新的变量,或者替换一个已经存在的变量。

  1. <#assign str "hello">
  2. ${str} <br>
  3. <#assign num = 1 names = ["zhangsan","lisi","zhaoliu"]>
  4. ${num} -- ${names?join("、")+"。"}

2. macro自定义指令

使用macro指令来自定义一些自定义指令相当于。指令可以被多次使用,自定义指令中可以包含字符串,也可以包含内置指令。

自定义指令**

  1. <#macro address>
  2. © 1995-2020 The FreeMarker project. all rights reserved.
  3. </#macro>

使用自定义指令

  1. <@address></@address>

定一个多个参数的自定义指令

  1. <#macro multiplicationTable rows space>
  2. <#list 1..rows as i>
  3. <#list 1..rows as j>
  4. ${j} * ${i} = ${j * i}
  5. <#list 1..space as s>
  6. &nbsp;
  7. <#/list>
  8. <#/list>
  9. <br>
  10. </#list>
  11. <#/macro>

使用方式

  1. <@multiplicationTable rows=6 space2> </@multiplicationTable>

3. nested 占位指令

nested指令执行自定义指令开始和结束标签中间的模版片段。嵌套的片段可以包含模版中任意合法的内容。没使用一次指令就会包含一次指令输出。

  1. <#macro nestedTest>
  2. 这是自定义指令的第一行。
  3. <#nested>
  4. <#nested>
  5. </#macro>
  1. <@nestedTest><h5>这是自定义指令附加的一行。</h5></@nestedTest>

4. import导入指令

import指令可以引入一个库。也就是说他创建了一个新的命名空间,然后在这个命名空间中执行给定路径的模版。可以使用引入的空间中的指令。
multiplication-table.ftl

  1. <#macro multiplicationTable rows space>
  2. <#list 1..rows as i>
  3. <#list 1..rows as j>
  4. ${j} * ${i} = ${j * i}
  5. <#list 1..space as s>
  6. &nbsp;
  7. <#/list>
  8. <#/list>
  9. <br>
  10. </#list>
  11. <#/macro>

在另一个文件中通过import导入multiplication-table.ftl的命名空间,使用该命名空间的指令。

  1. <#import "multiplication-table.ftl" as cfbUtil>
  2. <@cfbUtil.multiplicationTable rows =8 space=2></@cfbUtil.multiplicationTable>

5. include包含指令

可以使用include指令在你的模版中插入另外一个FreeMarker模版文件。被包含模版的输出格式是在include标签出现的位置插入的。被包含的文件和包含他的模版共享变量,比frame更强一些,就像一个文件一样。

  1. <#include "header.html">
  2. <#include "header.ftlh">
  3. <#include "info.txt">

6. function方法变量

创建一个方法变量(在当前命名空间中,如果你知道命名空间的特性)。这个指令和macro指令的工作方式一样,除了return指令必须又一个参数来指定方法的返回值,而且视图写入输出的将会被忽略。如果到达</#function>也没有执行return returnValue,那么方法的返回值就是未定义变量。

  1. <#function name param1 param2=2 ... paramN>
  2. ...
  3. <#return returnVlue>
  4. </#function>

成员简明

  • name:方法变量名称(不是参数变量)
  • param1,param2… :方法参数(非表达式,是局部变量),在=号后面可以设置默认值
  • paramN:可选的表示最后一个参数,意味着宏接收可变的参数数量,局部变量paramN将是额外参数的序列。
  • returnValue:计算方法调用值的表达式

注意事项

  • return指令可以多次使用
  • 没有默认值的参数必须在有默认值的参数之前

freeMarker页面静态化

通过上述介绍可知freeMarker是一种基于模版的、用来生成输出文本的通用工具,所以我们可以使用他制定符合自己业务的模版,然后生成自己的html页面。freeMarker是通过freemarker.template.Configuration这个对象对模版进行加载的(他也处理创建和缓存与解析模版的工作),然后我们通过getTemplate方法获得你想要的模版,有一点要记住freemarker.template.Configuration在你的整个应用必须保证唯一实例。

  1. <#-- 新闻标题 -->
  2. <h1>${title}</h1>
  3. <p>
  4. &nbsp;&nbsp;新闻来源:${source}&nbsp;发布时间:${puTime?string("yyyy-MM-dd HH:mm")}
  5. </p>
  6. <#-- 新闻内容 -->
  7. <p>
  8. ${content}
  9. </p>