FreeMarker入门二
命名空间
在多个组织或者多个个人编写自定义指令的时候,命名可能会引起冲突。所以使用命名空间避免命名冲突
如下,有个名为Hello.ftl
的模板文件,其中自定义了一个指令
<#macro sayHello name>
Hello, ${name}
</#macro>
现在在另一个模板文件中使用这个自定义的指定,原来我们知道可以通过include引入进来,但这样做并不好。
我们想把它划分在一个命名空间中,这样可以与同命名的指令区分开来,可以使用import
指令,如:
<#import "Hello.ftl" as Hello>
把"Hello.ftl"
导入,命名空间为Hello
,所以使用sayHello
指令如下:
<@Hello.sayHello name="小明" />
除了可以调用到自定义的指令外,其中的变量也是可以调用到的
<#-- Hello.ftl-->
<#assign num=10>
.......
<#--namespace.ftl-->
${Hello.num}
偶尔想要在一个被包含的命名空间上创建或替换一个变量。 那么可以使用 assign
指令
<#import "/lib/my_test.ftl" as my>
${
my.mail}
<#assign mail="jsmith@other.com" in my>
${
my.mail}
字符串函数
substring (已废弃)
exp?substring(from, toExclusive)
from
: 第一个字符的索引toExclusive
:子串最后一个字符之后的字符位置索引(不包括此字符)
ends_with
ends_with
返回是否这个字符串以参数中指定的子串结尾,返回类型是布尔型
${
"ahead"?ends_with("head")?c}
index_of
index_of
返回第一次字符串中出现子串时的索引位置。
${
"abcabc"?index_of("bc")}
如上结果为1
length
length
字符串中字符的数量
${
"abcabc"?length}
如上结果为6
left_pad
left_pad
在字符串的开始插入空白, 直到整个串的长度达到参数指定的值
如果字符串的长度达到指定数值或者比指定的长度还长, 那么就什么都不做了
[${
""?left_pad(5)}]<#-- [ ] -->
[${
"a"?left_pad(5)}]<#-- [ a] -->
如果使用了两个参数,那么第一个参数表示的含义和你使用一个参数时的相同, 第二个参数指定用什么东西来代替空白字符。比如:
[${
"ab"?left_pad(5, "-")}]<#-- [---ab] -->
contains
contains
是否包含