freemarker ftl java_FreeMarker学习1(Ftl)

一个ftl标记不能放在另外一个ftl标记里面,但是注释标记能够放在ftl标记里面。

系统预定义指令采用#>

用户自定义指令采用@>

hash片段可以采用: products[10..19] or products[5..] 的格式。

序列也可以做加法计算:passwords + {"joe":"secret42"}

缺省值: name!"unknown" 或者 (user.name)!"unknown" 或者 name! 或者 (user.name)!

null值检查: name?? or (user.name)??

转义列表:

Escape sequence

Meaning

\"

Quotation mark (u0022)

\'

Apostrophe (a.k.a. apostrophe-quote) (u0027)

\\

Back slash (u005C)

\n

Line feed (u000A)

\r

Carriage return (u000D)

\t

Horizontal tabulation (a.k.a. tab) (u0009)

\b

Backspace (u0008)

\f

Form feed (u000C)

\l

Less-than sign: <

\g

Greater-than sign: >

\a

Ampersand: &

\{

Curly bracket: {

\xCode

Character given with its hexadecimal Unicode code (UCS code)

如果想打印${,则需要将{转义,可以写成"$\{user}",或者可以用生字符(r指令):$(r "${xx}"}

序列构成:${x}#list>

不同的对象可以存放在一个序列里面,比如:[2 + 2, [1, 2, 3, 4], "whatnot"]. 第一个是数字,第二个是序列,第三个是字符串。

可用采用start..end的方式来定义一个数字序列,start可以小于end,同时,end也可以省略。

hash取值支持一下四种模式:book.author.name, book["author"].name, book.author.["name"], book["author"]["name"].

特殊变量是指freemaker引擎本身定义的变量。访问时,以.variable_name的语法访问。

变量表达式支持嵌套模式,比如:${"Hello ${user}!"}。

变量表达式在指令中的使用情况:

变量表达式可以在指令中,用“”的方式存在,不如:.

但是不允许下面的方式存在: Wow!#if>, 正确写法是:Wow!#if>.

而且 Wow!#if>写法也不正确,因为"${isBig}"返回的是字符串,不是boolean类型。

字符串中取字符或字符串采用以下语法:${user[0]},${user[0..2]} ${user[4..]},${user?string(4)}

序列操作:

加法: 但要注意串联之后的读取速度变慢。

子序列:seq[1..4]

序列和hash的串联都只能用于两个相加,不能有多个相加的模式,hash相加,如果两个相加的hash存在相同的key,则后面会覆盖前面的。

在使用>=或者>时,需要注意一些问题,因为freemaker会将>解释成标记的关闭符,为了解决这个问题,需要在表达式加上括号,比如: y)>. 或者使用 > and &lt符号来代替。

无值变量(包括无该变量,null,返回void,无属性等):unsafe_expr!default_expr or unsafe_expr! or (unsafe_expr)!default_expr or (unsafe_expr)!缺省值可以是任何类型,不一定是数字,比如:hits!0 或者 colors!["red", "green", "blue"].

如果缺省值忽略,那么将会默认为空串、空序列或者空hash,因为freemarker支持多类型的值。不过要让默认值为0或false,则不能省略缺省值。

非顶层变量的无值处理:

product.color!"red":只处理product不为空,color为空的缺省值处理,如果product为空,则freemaker会抛出异常。(product.color)!"red":则会处理product为空,color为空,或者没有color属性的无值情况。

无值变量的判断操作:unsafe_expr?? or (unsafe_expr)??

判断变量是否是无值。

普通变量插入方式: ${expression},${3+5);数字变量插入方式: #{expression} or #{expression; format}:过期。

变量只能用于文本区或者是字符串里面,比如:

Hello ${name}!

以及

数字值的插入:根据缺省的number_format输出,以及可以通过setting来达到设置数字格式的目的,也可以通过内置函数string来改变输出格式。

日期类型的格式设置:date_format,time_format和datetime_format定义宏:

不带参数:...#macro>,引用   带参数:...#macro>,引用,带有参数的宏,调用是参数的值必须和参数的个数相同。当然也可以在宏定义时给参数一些默认值。比如:

宏里面的嵌套内容:

#macro>

在宏的定义body中加入指令。嵌套的内容可以是任何正确的ftl块。

宏的本地变量在嵌套内容中是不可见的。

宏定义时,指令相当于调用定义的内容,而使用宏时,nest body相当于定义。

#list>

#macro>

${c}. ${halfc} Last!#if>

@repeat>

定义变量:

在模板中定义的变量将会隐藏(不是更改)数据模型根下面的同名的变量。

模板中的3种类型变量:

1:plain variables,能够在模板中的任何地方访问,一个模板include另外一个模板,也可以访问被包含模板的变量。可以通过assign或者macro指令产生或替换变量。

如果要访问数据模型中的变量,则可以通过.global来访问:   

${user}         

${.globals.user}

2:Local variables,宏定义body中用local指令创建或者替换。

3:Loop variables:由list指令产生。namespaces:

${my.mail}

设置命名空间里面的变量:

命名空间与数据模型:命名空间的ftl可以访问数据模型的变量。同样命名空间的变量也会隐藏数据模型中同名的变量。

空白问题:

1:White-space stripping,默认为enabled,清除ftl标记带来的空白以及缩进。处理模板的空白。

2:t, rt, lt指令。3:ftl的参数strip_text.

用compress directive或者transform来处理输出。

...#compress>:消除空白行。

.../@compress将输出压缩为一行。

可替换语法:

freemarker可用"["代替"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值