模板引擎(FreeMarker模板语法)——最全

模板引擎(FreeMarker模板语法) 
https://blog.csdn.net/qq_41609208/article/details/111408733 郑重其事,鹏程万里 于
2020-12-19 19:57:44 发布 1154 收藏 8 分类专栏: 语法配置类相关 文章标签: freemarker 版权 语法配置类相关 专栏收录该内容 5 篇文章0 订阅 订阅专栏 模板语言语法 (1) 基本语法 表达式 表示 ${…} 显示后端返回的数据 ${r""} 表示r后面的字符串为原生字符串,不用ftl语法解析 [“a”, “b”, “c”] 定义一个序列 list[index] 显示序列index索引处的元素 start…end 定义值域,13 表示[1,2,3]序列;31 表示[3,2,1]序列 start…<end或start…!end 不包含尾部,13 表示[1,2]序列 start…*length 指定长度,5…*3表示[5,6,7]序列;5…*-3表示[3,4,5]序列 start… 向右无限序列 { “a”: “b”, “c”: “d”} 定义一个哈希表 ${a.b} 或 ${a[“b”]} 显示哈希表的值 . 显示内置常量,例如: .variable_name [start…end] [start…<end]或[start…!end] [start*…**length] [start…] 可用于按索引截取字符串 可用于按索引截取序列 + 字符串相加为拼接 数字相加为求和 序列相加合并 哈希表相加合并,键值已有后覆盖前 + - * / % 可用于数字计算 == != < <= > => 可用于比较计算 && || ! 可用于逻辑计算 = += -= *= ++ – 常用的赋值符 ? 用于使用内建函数,例如: ${“abc”?upper_case} ! 设置变量不存在要显示的默认值, 例如: ${user!“admin”} 如果默认为空字符串,!后可省略,例如: u s e r ! < b r / > {user!}<br />user!<br/>{user.name!} user不能不存在,name可未定义; ${(user.name)!} user与name都可不存在 ?? 判断变量是否存在;例如 <#if user??></#if> <#…></#…> 内置的指令标签 <@…></@…> 自定义指令(宏)的调用 定义字符中的转义符 转义序列 含义 \" 引号 (u0022) \' 单引号(又称为撇号) (u0027) \{ 起始花括号:{ \\ 反斜杠 (u005C) \n 换行符 (u000A) \r 回车 (u000D) \t 水平制表符(又称为tab) (u0009) \b 退格 (u0008) \f 换页 (u000C) \l 小于号:< \g 大于号:> \a &符:& \x*Code* 字符的16进制 Unicode 码 (UCS 码) (2) 基本常用指令 a. 判断指令 -- if elseif else <#if key == 1> -- key=1时显示 <#elseif key == 2> -- key=2时显示 <#else> -- 其他情况时显示 </#if> 1 -- switch case <#switch key> <#case 1> -- key=1时显示 <#break>-- 有该标签时当key=1时不会判断下面其他条件 <#case 2> -- key=2时显示 <#break> <#default> -- 其他情况时显示 </#switch> 1 b. 遍历指令 -- list遍历 list要遍历的集合,item为遍历出的单个数据 <#else>可选 <#list list as item> ${item} -- 获取单个数据展示 <#else> -- 集合为空时显示 </#list> 1 -- list遍历 <#list list as item> ${item} <#sep>, </#sep> -- <#sep>可为每个遍历出的元素之前添加分割元素 </#list> 1 -- list遍历 <#list list as item> ${item} <#if item == "C"> <#break> -- <#break>可在遍历过程中停止之后的遍历 </#if> </#list> 1 -- list遍历: 遍历项 索引(0开始) 行号(1开始) 单双行(odd/even) <#list list as item> ${item} ${item?index} ${item?counter} ${item?item_parity} </#list> 1 -- map遍历 <#list map?keys as key> ${key} ${map[key]} </#list> 1 (3) 高级指令 a. 定义变量 -- 创建新常量及覆盖已有变量,in namespace指定模板命名空间(import标签设置),也就是设置指定命名空间(模板)的常量 <#assign name1="value1" name2="${key}" .... in namespace> ${name1} ${name2} ${key} <#assign name> <#list list as item> ${item} </#list> </#assign> -- 设置全局变量,在所有的 命名空间 中都可用 <#global name1="value1" name2="${key}" ...> <#global name> value </#global> -- 设置局部变量, <#local name1="value1" name2=${key} ...> 1 <#local name> value </#local> b. 异常处理 <#attempt> -- 未抛异常显示 <#recover> -- 抛异常显示 </#attempt> 1 -- 停止页面渲染,后台抛出异常 <#stop reason> 1 c 文本处理 -- 去除文本空行及每行前后端的空字符串 <#compress> ${key} </#compress> -- 把所有引入的值(${key}) 值做 x?html 处理. x?html可换为其他表达式 <#escape x as x?html> ${key} <#noescape> -- 不做 x?html 处理 ${key} </#noescape> </#escape> 1 -- 不使用ftl语法解析文本 <#noparse> </#noparse> 1 d. 剥离空白 -- 这些指令在行内的放置不重要,行首行尾中间都一样。 <#t> -- 忽略本行中首和尾的所有空白 <#lt> -- 忽略本行中首部所有的空白。 <#rt> -- 忽略本行中尾部所有的空白。 <#nt> -- 禁用行中出现的 剥离空白,去除t, rt,lt的效果 e. 其他 -- 刷新渲染页面 <#flush> 1 -- 标注模板的信息,必须是模板的第一句代码 <#ftl param1=value1 param2=value2 ...> -- 常用参数有: -- encoding ="utf-8" 编码集 -- strip_whitespace =true 设置剥离空白,设置为true时ftl标签不占行 -- strip_text = false 从模板中删除所有顶级文本 -- ns_prefixes 关联结点命名空间前缀的哈希表 -- attributes 关联模板任意属性(名-值对)的哈希表 1 -- 定义函数 name为方法名param为参数,returnValue为返回的值 <#function name param1 param2 ...> -- 可使用...定义可变参数 -- 可根据参数进行逻辑处理,可用<#local a=1>定义常量,也可直接采用引入的值 <#return returnValue> </#function> 1 -- 引入一个库 path为模板路径,hash为引用名称,可以使用 hash.xxx 方式使用path路径下模板的定义的常量,函数等 <#import path as hash> ${hash.key} -- 引入其他模板数据,path为模板路径,options可选配置参数 <#include path options> -- options(encoding="utf-8", parse=true)可选参数: -- encoding 设置编码集 -- parse = true 是否采用ftl语法解析引入的模板 -- ignore_missing = true 是否模板不存在时压制错误 1 -- 设置一个配置信息 <#setting name=value> -- 可选参数: -- locale 输出的本地化(语言),可以影响数字,日期等显示格式.可以配置多个,用下滑线分割,例如:en, en_US,en_US_MAC -- number_format 数字格式化,值可为number(默认的),computer,currency, percent;支持 ##.## 格式保留小数位数 -- boolean_format 以逗号分隔的一对字符串来分别展示true和false值,例如:"Y,N" -- date_format, time_format, datetime_format -- time_zone 设置时区 -- sql_date_and_time_time_zone -- url_escaping_charset -- output_encoding -- classic_compatible 1 f. 宏变量 -- m为调用名称,p为参数,可多个 <#macro m p1 p2 > -- 可在此处添加宏调用所展示的数据,可使用ftl指令及常量和变量等 ${p} -- 参数的获取 </#macro> -- 宏的调用 <@m p1="zp1" p2="zp2"/> <@m "zp1" "zp2"/> 1 -- 设置不定参,接收到的类型为哈希表 <#macro m p... > <#list p?keys as i> ${i} ${p[i]} </#list> </#macro> -- 可通过k=v的方式添加多个参数 <@m p1="zp1" p2="zp2"/> 1 <#macro m> <#nested> -- 可直接引入<@m></@m>标签体中的内容,可以多次被调用 </#macro> <@m p="zp1">嵌套内容</@m> 1 -- 循环变量 <#macro m p> <#nested p+1,p+2,p+3> </#macro> <@m p=3 ; a,b,c> ${a} ${b} ${c} </@m> 1 <#macro m> 12345 <#return> -- 标签后的文本不会显示 67890 </#macro> <@m/> 内置常量 常量 描述 .current_template_name 当前页面模板名 .data_model 直接访问数据模型的哈希表,也就是process方法设置的map数据 .error 用在<#recover>标签后面,用于存储异常信息 .globals 全局变量的哈希表,可通过${.globals[“key”]} 获取全局变量值 .lang 获取当前本地化设置语言的值 .locale 获取当前本地化设置的值 .locale_object 以 java.util.Locale 对象返回本地化设置的当前值 .locals 局部变量的哈希表 .main 主命名空间的哈希表 .main_template_name 顶级模板的名称 .namespace 当前 命名空间 的哈希表,无全局变量 .node 可以用访问者模式(也就是用 visit, recurse 等指令)处理的当前结点。 而且,当使用 FreeMarker XML Ant 任务 时, 它初始存储根结点 .now 返回当前的日期-时间 .output_encoding 返回当前输出字符集的名称;没有指定输出字符集时这个特殊变量是不存在的 .template_name 模板名称,但当 nested 被调用时,它会变成模板所属当前命名空间的名字 .url_escaping_charset URL转义的字符集,没指定则不存在 .vars 表达式 .vars.foo 返回和表达式 foo 相同的变量 .version 获取freemarker版本号 内置函数 (1) 字符串 函数 描述 boolean 字符串转为布尔值,由 boolean_format 设置格式 cap_first 字符串首字母大写 uncap_first 字符串首字母小写 capitalize 字符串中所有单词首字母大写 chop_linebreak 去除字符串末尾的\n contains(“str”) 判断字符串是否包含str字符串 date time datetime 字符串转时间或日期 datetime[“format”] 可指定日期格式 ends_with(“ends”) 判断字符串是否以 ends 结尾 starts_with(“starts”) 判断字符串是否以 starts开头 ensure_ends_with(“ends”) 返回以 ends结尾字符串,原有直接返回,没有加上返回 ensure_starts_with(“starts”) 返回以 starts开头字符串,原有直接返回,没有加上返回 groups 只作用于内建函数 matches 的结果 html 字符串按照HTML标记输出。例如; < 转换为&lt; xhtml 字符串作为XHTML格式文本 xml 字符串作为XML格式文本 index_of(“index”) 返回index在字符串中第一次出现的索引 j_string 根据Java语言字符串转义规则来转义字符串 js_string 根据JavaScript语言字符串转义规则来转义字符串 json_string 根据JSON语言的字符串规则来转义字符串 keep_after(“str”) 移除字符串中第一次出现str之前的部分 keep_after_last(“str”) 移除字符串中最后一次出现str之前的部分 keep_before 移除字符串中第一次出现str之后的部分 keep_before_last 移除字符串中最后一次出现str之后的部分 remove_beginning(“begin”) 移除首部begin,首部不为begin返回原字符串 remove_ending(“end”) 移除尾部end,首部不为end返回原字符串 last_index_of(“index”) 返回index在字符串中最后一次出现的索引 left_pad(10,“0”) 不够10的字符串向前补0,第二参数可选,默认空格 right_pad(10,“0”) 不够10的字符串向后补0,第二参数可选,默认空格 length 获取字符串长度 lower_case 字符串转小写 upper_case 字符串转大写 matches("[0-9]*") 正则匹配,返回布尔类型或匹配到的字符串列表 number 字符串转化为数字格式 replace(“a”, “b”) 字符串中的a替换为b rtf 字符串作为富文本(RTF 文本) split(",") 以,分割字符串 string 仅仅返回和其内容一致的字符串 trim 去掉字符串首尾的空格 url URL字符串进行转义 url_path 它和 url 相同,只是它不转义斜杠 (/)字符。 word_list 获取单词列表,按单个或多个空格分隔 通用标识,以下函数可添加一个参数进行配置 内建函数 i (忽略大小写) r (正则表达式) m (多行模式) s (dot-all模式) c (空白和注释) f (仅第一个) replace 是 是 仅 r 仅 r 仅 r 是 split 是 是 仅 r 仅 r 仅 r 否 matches 是 忽略 是 是 是 否 keep_after 是 是 是 是 是 忽略 keep_after_last 是 是 是 是 是 忽略 keep_before 是 是 是 是 是 忽略 keep_before_last 是 是 是 是 是 忽略 ensure_starts_with 是 忽略 是 是 是 忽略 (2) 数字 函数 描述 abs 绝对值 c 根据程序语言的用法来进行格式化 is_infinite 判断数字是否是无限浮点数 is_nan 判断数字是否是浮点数NaN lower_abc 将数字转为字母1->a… 当大于z时转换为aa,ab… upper_abc 将数字转为字母1->A… 当大于Z时转换为AA,AB… round 四舍五入 floor 舍弃小数点后的整数,向负无穷舍弃 ceiling 进1,向正无穷进位 string 数字转字符串,通过 number_format 和 locale 设置的默认格式 (3) 日期 函数 描述 date 只有年月日的日期 time 只有时分秒的时间 datetime 含有年月日时分秒的日期 date_if_unknown 不知道类型时用date time_if_unknown 不知道类型时用time datetime_if_unknown 不知道类型时用datetime iso_… 按格式转换日期为字符串 string[“yyyy-MM-dd HH:mm:ss”] 按格式转换日期为字符串 (4) 布尔值 函数 描述 c 根据程序语言的用法来进行格式化 string(“yes”, “no”) 布尔转字符串,可指定格式 then(whenTrue, whenFalse) 类似三元运算符 (5) 集合 函数 描述 chunk(4, ‘-’) 大集合截取为长度为4的多个小集合,不够用-补 第二个参数为可选,不设置最后一个小集合不填充 first 获取第一个元素 last 获取最后一个元素 join(",","-",".") 用分隔符拼接所有元素,第一二参数为可选 第二个集合为空时显示的字符串,第三参数为最后显示的字符串 reverse 反转集合 seq_contains(“a”) 判断元素是否存在集合中 seq_index_of(“a”) 返回第一次出现指定元素的索引 seq_last_index_of 返回最后一次出现指定元素的索引 size 获取集合大小 sort 以升序方式返回集合。 sort_by(“name”) 按指定字段升序排序集合 (5) 哈希表 函数 描述 keys 获取所有哈希表的键值 values 获取所有哈希表的值 (6) 结点(对于XML) 函数 描述 ancestors 一个包含所有结点祖先结点的序列,以直接父结点开始,以根结点结束。 children 一个包含该结点所有子结点(也就是直接后继结点)的序列。 node_name 返回用来决定哪个自定义指令来调用控制这个结点的字符串。 node_namespace 返回结点命名空间的字符串。 node_type 描述结点类型的字符串。 parent 在结点树中,返回该结点的直接父结点。 root 该结点所属结点树的根结点。 (7) 循环变量 函数 描述 counter 获取从1开始的索引 has_next 判断是否有下一个元素 index 获取从0开始的索引 is_even_item 判断是否时偶数行 is_odd_item 判断是否时奇数行 is_first 判断是否是第一个 is_last 判断是否是最后一个 item_cycle(“1”,“2”,“3”) 循环输出参数值 item_parity 获取单偶标识,odd/even item_parity_cap 获取单偶标识,Odd/Even (8) 独立类型 函数 描述 switch(case1, result1, case2, result2, … , defaultResult) 匹配不同值输出不同结果 (9) 高级函数 函数 描述 api.myMethod(“parameter”) has_api 调用模板引入对象方法 判断是否可以使用api函数 byte, double, float, int, long, short 类型转换, long也可以转换时间日期 eval 求一个表达式(“1+1”?eval)字符串的值 has_content 判断一个变量是否有值,是否为null为空 interpret 能够将文本的值解析为宏 namespace 返回和宏变量或函数变量关联的命名空间 只能和宏和函数一起来用它 new 模版里创建一个java对象,而不是传入进去的 number_to_date number_to_time number_to_datetime 数字转时间日期类型 is_… 内建函数 如果值是 … 时返回 true is_string 字符串 is_number 数字 is_boolean 布尔值 is_date 不要使用它!使用 is_date_like 来代替, 它们是相同的。往后也许会修改它的含义为 date_only。 is_date_like 日期,也就似乎日期,时间或者日期-时间, 亦或者是未知精确类型的日期(从 FreeMarker 2.3.21 版本开始) is_date_only 日期 (没有时间部分) (从 FreeMarker 2.3.21 版本开始) is_time 时间 (没有年-月-日部分) (从 FreeMarker 2.3.21 版本开始) is_datetime 日期-时间 (包含年-月-日和时间两者) is_unknown_date_like 不清楚是日期或时间或日期-时间的日期 is_method 方法 is_transform 变换 is_macro 宏或函数(当然,由于历史问题,也对函数有效) is_hash 哈希表 (包含扩展的哈希表) is_hash_ex 扩展的哈希表 (支持 ?keys 和 ?values) is_sequence 序列 is_collection 集合 (包含扩展的集合) is_collection_ex 扩展的集合 (支持 ?size) is_enumerable 序列或集合 is_indexable 序列 is_directive 指令类型 (例如宏 或 TemplateDirectiveModel, TemplateTransformModel, 等…), 或者函数 (由于历史问题) is_node 结点 ———————————————— 版权声明:本文为CSDN博主「郑重其事,鹏程万里」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_41609208/article/details/111408733

 

posted @ 2022-07-22 17:28  前端白雪  阅读(4334)  评论(0编辑  收藏  举报