freemarker相关

保留关键字

true:布尔值”true”
false:布尔值”false”
gt:比较运算符”大于”
gte:比较运算符”大于或等于”
lt:比较运算符”小于”
lte:比较运算符”小于或等于”
as:由少数指令使用
in:由少数指令使用
using:由少数指令使用
如果你的变量名包含一些符号时,比如 foo-bar,你编写${foo-bar},FreeMarker 可能会认为是从 foo 中减去 bar,这时可以使用${.vars[“foo-bar”]}

特殊变量

特殊变量是由 FreeMarker 引擎自己定义的变量。要访问它们,你可以使用.variable_name 语法。比如,你不能仅仅写 version,而必须写.version。支持的特殊变量有:
data_model:你可以使用来直接访问数据模型的哈希表。也就是,你使用global 指令定义在这里不可见的的变量。
vars:表达式.vars.foo 返回和表达式 foo 相同的变量。出于某些原因你不得不使用方括号语法时这是有用的,因为它只对哈希表子变量有用,所以你需要一个人工的父哈希表。
version:返回 FreeMarker 版本号的字符串形式。
now : 返 回 当 前 的 时 间 日 期 。 示 例 : ${.now}。
globals:你可以使用来访问全局可访问的变量的哈希表:数据模型和由global 指令创建的变量。注意用 assign 或 macro 创建的变量不是全局的。因此当你使用 globals 时你不能隐藏变量。
locales:你可以访问本地化变量的哈希表。
language:返回当前本地设置的语言部分的值。比如.locale 是 en_US,那么.lang 是 en。
locale:返回当前本地设置的值。这是一个字符串,比如 en_US。
main:你可以用来访问主命名空间的哈希表。
namespace:你可以用来访问当前命名空间的哈希表。
current_node : 当前节点,处理xml过程中用到。
output_encoding(从 FreeMarker 2.3.1 版本开始可用):返回当前输出字符集的名称。
current_template_name:当前模板的名称(从 FreeMarker 2.3.23 版本开始可用)。
main_template_name:顶级模板的名称 (从 FreeMarker 2.3.23 版本开始可用)。
url_escaping_charset(从 FreeMarker 2.3.1 版本开始可用): URL 转义的字符集的名称。
error(从 FreeMarker 2.3.1 版本开始可用):这个变量在 recover 指令体中可以访问,它存储了我们恢复错的错误信息。

非空判断

检测不存在的值:使用name?? 或者(user.name)??
处理不存在的值:name!”unknown” 或者(user.name)!”unknown” 或者 name! 或者 (user.name)!
检测空值:使用name?has_content
${user!”Anonymous”}相当于<#if user??>${user}<#else>Anonymous</#if>
${user!}则什么都不输出相当于<#if user??>${user}</#if>

循环变量内建函数

counter 从1开始的索引
has_next 是否还有下一项
index 从0开始的索引
is_even_item 是否是奇数项
is_first 是否是第一项
is_last 是否是最后一项与has_next相反
is_odd_item 是否是偶数项
item_parity 返回字符串值 ”odd” 或 ”even”
item_parity_cap 返回字符串值 ”Odd” 或 ”Even”
item_cycle 可以指定何值来代替 ”odd” 和 ”even”,允许多余两个值来循环

常用指令

include指令

<#include filename>
<#include filename options>
说明:options包括parse 和encoding
parse :为true时,被包含的文件作用FTL模板处理,否则作为普通文本处理,默认为true。
encoding :编码
<#include “*/footer.ftl”>
 *代表本目录或任一上级目录。
如有”/foo/bar/template.ftl”,则上例按如下顺序查找/foo/bar/footer.ftl 、 /foo/footer.ftl、 /footer.ftl 。如有<#include “*/commons/footer.ftl”> ,会 按/foo/bar/commons/footer.ftl、/foo/commons/footer.ftl 、/commons/footer.ftl顺序查找。

import指令

<#import path as hash>
例:
mylib.ftl:

<#macro copyright date><br>
 <p>Copyright (C) ${date} Julia Smith. All rights reserved.</p><br>
</#macro><br>

在另一个文件中:
<#import “/libs/mylib.ftl” as my>
<@my.copyright date=”1999-2002”/>

noparse指令

<#noparse>
 <#list animals as being>
 <tr><td>${being.name}<td>${being.price} Euros
 </#list>
</#noparse>

输出

<#list animals as being>
 <tr><td>${being.name}<td>${being.price} Euros
 </#list>

assign指令

<#assign name=value>
<#assign name1=value1 name2=value2 ... nameN=valueN> 
<#assign name=value in namespacehash>
<#assign name> capture this </#assign>
<#assign name in namespacehash> capture this</#assign>

在当前或指定命名空间内定义或替换已存在的顶级变量。如:some_hash.subvar不行,而 some_hash则可以。 Assign指令中包含的内容不会被输出,而是被存入指定的变量中。
<#assign var=”你好”>
${var}
输出:你好。

global指令

<#global name=value>
<#global name1=value1 name2=value2 ... nameN=valueN> 
<#global name> capture this </#global>

在所有命名空间内定义或替换已存在的顶级变量。规则与assign一致。

local 指令

<#local name=value> 
<#local name1=value1 name2=value2 ... nameN=valueN> 
<#local name> capture this</#local>

规则与assign一致,只在宏和方法的内部定义才会有作用。

springmvc 配置参数

locale

作用
设置默认地区,主要影响数字、日期输出格式,request中没有指定地区时模板查找值
例如:eh_US,zh_CN

classic_compatible

作用
兼容旧版freemarker习惯,不建议使用,会导致一些问题,比如include必须用绝对路径值
“true”, ”false” 或者 “yes”, ”no” 或者 “t”, ”f” 或者  ”y”, ”n”

template_exception_handler

作用
模板异常处理器

rethrow,debug,html_debug,ignore
也可以是类名
默认是debug

arithmetic_engine

作用
数学运算引擎

bigdecimal,conservative
默认值bigdecimal

object_wrapper

作用
对象包装器

default, default_2_3_0,simple,beans,jython

number_format

作用
设置默认数字输出格式

number,currency,percent,computer
也可以 DecimalFormat 类型(比如”0.##”)
具体使用参考
http://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html?is-external=true

boolean_format

作用
设置默认布尔值输出格式

true时输出的值和false时输出的值使用英文逗号分隔
比如true,false或者 是,否

date_format,time_format,datetime_format

作用
设置默认时间、日期输出格式

short, medium, long, full
也可以是表达式 比如yyyy-MM-dd hh:mm:ss a或者yyyy-MM-dd HH:mm:ss

time_zone

作用
设置时区

GMT+8:00,Asia/Shanghai
默认为系统时区和设置的locale无关
 

sql_date_and_time_time_zone

作用
设置java.sql.Date的时区

GMT+8:00,Asia/Shanghai

output_encoding

作用
设置FreeMarker输出的字符集

utf-8,gb2312

url_escaping_charset

作用
设置URL转义字符集

UTF-8,GB2312,ISO-8859-1
默认为output_encoding中的值

auto_flush

作用
设置模板处理后自动刷新

true,false
默认值true

new_builtin_class_resolver

作用
设置?new内建函数使用范围?new()

unrestricted,safer,allows_nothing
如果值包含冒号则使用OptInTemplateClassResolver.此时可使用allowed_classes:和trusted_templates:
默认是safer
如果值包含点则当作类名使用

show_error_tips

作用
控制是否显示错误提示

true,false
默认值true

api_builtin_enabled

作用
控制?api内建函数是否可用

true,false
默认值false 

auto_import

作用
在所有模板中自动引入模板

规范:模板文件 as 命名空间
多个引入用逗号隔开
/lib/form.ftl as f, /lib/widget as w, “/lib/odd name.ftl” as odd

auto_include

作用
在所有模板中自动包含模板

规范:模板文件
多个引入用逗号隔开
/include/common.ftl, “/include/evil name.ftl”

default_encoding

作用
设置默认编码,如果不设置,可能会导致切换到不同环境时产生乱码问题

UTF-8,ISO-8859-1,GB2312
默认值为操作系统的编码

localized_lookup

作用
控制模板本地化查找是否可用,比如locale设置为zh_CN加载模板foo.ftl时,freemarker自动查找foo_zh_CN.ftl,foo_zh.ftl,foo.ftl并返回找到的第一个

true,false
默认值为true

whitespace_stripping

作用
控制是否删除多余空格

true,false
默认值为true

template_update_delay

作用
设置模板缓存时间,没有设置单位时,单位是秒

正整数,或者带单位的正整数(单位可以是s,ms,m,h;分别表示秒,毫秒,分钟,小时)
默认值为5秒

tag_syntax

作用
设置标签风格<#tag> 或者[#tag]

auto_detect,angle_bracket,square_bracket
默认值为angle_bracket

template_loader

作用
设置自定义的模板加载器

default,类名
默认值 default

宏定义

格式:
<#macro name param1 param2 … paramN>

</#macro>
name:宏变量的名称。
param1,param2 等: 局部变量的名称,存储参数的值,在= 号后面的默认值(表达式)可选。默认值也可以是另外一个参数,比如:<#macro section title label=title>。

例子:
<#macro test>
Test text
</#macro>

调用方式:
<@test/>

输出:
Test text

<#macro test foo bar baaz>
Test text, and the params: ${foo}, ${bar}, ${baaz}
</#macro>

调用方式:
<@test “a” “b” 55-2/>
<@test bar=”b” foo=”a” baaz=5
5-2/>

输出都是:
Test text, and the params: a, b, 23

nested 指令执行自定义指令开始和结束标签中间的模板片段。
<#macro do_twice>

  1. <#nested>
  2. <#nested>
    </#macro>

调用方式:
<@do_twice>something</@do_twice>

输出:

  1. something
  2. something
文章导航