以下指示我对Freemark最常用的标签与问题的总结,详情请参考官方文档
对空值做处理
对输出的空值做处理,无返回值
-
输出name的值:
- ${name}。如果name为null,就会报错。
- ${name!}。如果name为null,就不会报错,什么也没输出
- ${name!"默认值"}。如果name为null,就输出”默认值”字符串
- ${name!100}。如果name为null,就输出100
-
输出user.name的值:
- ${(user.name)!"默认值”},如果user或name为null,就输出默认值
- ${user.name!"默认值”},如果user为null会报错,如果name为null,就输出默认值。
-
输出user.birthday的值:
- ${user.birthDate?string("yyyy-MM-dd")},如果user或birthday为空,就会报错。
- ${(user.birthDate?string("yyyy-MM-dd"))!},如果user或birthday为null,什么也没输出
- 使用default内建函数来处理:${user.name?default('vakin')} (较繁琐)
测试是否为null,返回boolean值
- product.color??将只测试color是否为null
- (product.color)??将测试product和color是否存在null
值得注意的是??与?的区别??是判断对象是否为空,例如:<#if object??> object对象不为空(即object存在)</#if>
?后面要加内建函数名,例如:<#if object?exists> object对象不为空(即object存在)</#if>
逻辑语句
-
条件判断
<#if condition> ... <#elseif condition2> ... <#elseif condition3> ... ... <#else> ... </#if>
-
condition
,condition2
, 等:将被计算成布尔值的表达式。 -
elseif
和else
是可选的。
-
-
循环
<#list sequence as item> Part repeated for each item <#else> Part executed when there are 0 items </#list>
-
else
部分是可选的,意思是sequence的size为0的时候执行的语句, 而且仅仅从 FreeMarker 2.3.23 版本开始支持。 -
sequence
: 将我们想要迭代的项,算作是序列或集合的表达式 -
item
: 循环变量 的名称 (不是表达式) - 在标签之间的多个 "parts" 可以是任意的FTL (包括嵌套的
list
)
-
注意事项
-
??与?的区别
- ??是判断对象是否为空,例如:<#if object??> object对象不为空(即object存在)</#if>
- ?后面要加内建函数名,例如:<#if object?exists> object对象不为空(即object存在)</#if>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。