💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 前言 FreeMarker 是一款模板引擎:即一种基于模板、用来生成输出文本(任何来自于 HTML格式的文本用来自动生成源代码)的通用工具。 FreeMarker 实际上是被设计用来生成 HTML 页面,尤其是通过实现了基于 MVC(Model View Controller, 模型-视图-控制器)模式的 Java Servlet 应用程序。 ## freemarker的常用指令 模板+数据模型(java)=输出 * 插值 ${variableName} ${obj.attr} * 逻辑运算符,逻辑运算符只能用于布尔值。 &&:逻辑与;||:逻辑或; !:逻辑非 * 内建函数 FreeMarker提供了一些内建函数来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可以通过内建函数来转换输出变量。 1. **字符串相关常用的内建函数** html:对字符串进行HTML编码; cap_first:使字符串第一个字母大写; lower_case:将字符串转成小写; upper_case:将字符串转成大写; 2. **集合相关常用的内建函数**<br> size:获得集合中元素的个数; 3. **数字值相关常用的内建函数**<br> int:取得数字的整数部分。 ## 模板开发语句 * if使用指令(常用必会) ~~~ <#if x == 1> x is 1 </#if> //else if ; else 用法 <#assign age=23> <#if (age>60)>老年人 <#elseif (age>40)>中年人 <#elseif (age>20)>青年人 <#else> 少年人 </#if> ~~~ * switch使用指令(常用必会) ~~~ <#switch x> <#case 1> 1 <#break> <#case 2> 2 <#break> <#default> 0 <#break> </#switch> ~~~ * list循环格式(常用必会) ~~~ <#list students as s> <tr> <td>${s.no}</td> <td>${s.name}</td> <td>${s.sex}</td> </tr> </#list> ~~~ * assign指令使用示例,定义模板变量,可以使用模板变量(常用必会) ~~~ <#-- 直接定义 --> <#assign x="Hello ${user}!"> <#-- 定义 --> <#assign x> <#list ["星期一", "星期二", "星期三", "星期四", "星期五"] as n> ${n} </#list> </#assign> ${x} ~~~ * 集合以及对象都可以做叠加(常用必会) ~~~ <#list ["星期一","星期二","星期三"] + ["星期四","星期五"] as x> ${x} </#list> <#assign scores = {"语文":86,"数学":78} + {"数学":87,"Java":93}> ~~~ * import指令 (常用必会) 该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: `<#import "/lib/common.ftl" as com> ` 上面的代码将导入`/lib/common.ftl`模板文件中的所有变量,交将这些变量放置在一个名为`com`的Map对象中. * include语法(常用必会) 可以包含页面:`<#include filename [options]> `,在上面的语法格式中,两个参数的解释如下: 1.filename:该参数指定被包含的模板文件 ; 2.options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true. * noparse指令 noparse指令指定FreeMarker不处理该指定里包含的内容,该指令的语法格式如下: ~~~ <#noparse> <#list books as book> <tr><td>${book.name}<td>作者:${book.author} </#list> </#noparse> 输出如下: <#list books as book> <tr><td>${book.name}<td>作者:${book.author} </#list> ~~~ * escape , noescape指令 escape指令导致body区的插值都会被自动加上escape表达式,但不会影响字符串内的插值,只会影响到body内出现的插值,使用escape指令的语法格式如下: ~~~ <#escape identifier as expression>... <#noescape>...</#noescape> </#escape> //看如下的代码: <#escape x as x?html> First name:${firstName} Last name:${lastName} Maiden name:${maidenName} </#escape> //上面的代码等同于: First name:${firstName?html} Last name:${lastName?html} Maiden name:${maidenName?html} ~~~ * setting指令 该指令用于设置FreeMarker的运行环境,该指令的语法格式如下:`<#setting name=value>`,在这个格式中,name的取值范围包含如下几个: locale:该选项指定该模板所用的国家/语言选项 number_format:指定格式化输出数字的格式 boolean_format:指定两个布尔值的语法格式,默认值是true,false date_format,time_format,datetime_format:指定格式化输出日期的格式 time_zone:设置格式化输出日期时所使用的时区 * layout(必会的) 1. layout.ftl,模板布局页面 ~~~ <#macro layout> <html> <head> </head> <body> <div style="width: 700px; text-align:center; font-size:30px;"> <#include "header.ftl"> <#include "sidebar.ftl"> <#-- 在这里嵌入main content --> <#nested> <#include "footer.ftl"> </div> </body> </html> </#macro> ~~~ 1. page.ftl,具体内容页面 ~~~ <#-- 引入布局指令的命名空间 --> <#import "../layout/defaultLayout.ftl" as defaultLayout> <#-- 调用布局指令 --> <@defaultLayout.layout> <#-- 将下面这个main content嵌入到layout指令的nested块中 --> <div style="width:70%; height:300px; float:left; background-color: #12c5ae;"> main content</div> </@defaultLayout.layout> ~~~ * 注释部分 ` <#-- 注释部分 -->`