注意:在实际开发中使用最多的是list if标签
比如:[#if bean.state?? && 1 == bean.state ]
<a class="acceptBtn" data-info="${(bean.id)!}-${(bean.state)!}" ><span class="blue">下架</span></a><span class="fc9a9a9a">上架</span>
[#else]
<span class="fc9a9a9a">下架</span><a class="acceptBtn" data-info="${(bean.id)!}-${(bean.state)!}"><span class="blue">上架</span></a>
[/#if]
其中的bean一个对象state是bean中的一个属性,“??”表示bean.state的值是否存在,1 == bean.state判断值是否为1,这个类似于java的if else,同样freemarker也有elseif标签
[#list pagination.list as bean]
<ul class="list_content_2">
<li class="pt5">${(bean.startTime?string('yyyy-MM-dd'))!}</li>
<li class="pt5">${(bean.endTime?string('yyyy-MM-dd'))!}</li>
<li class="pt5">
[#if bean.state?? && 2 == bean.state ]已还车
[#elseif bean.state?? && 1 == bean.state ]
正常使用
[#else]
<span class="fc9a9a9a">未启用</span>
[/#if]
</li>
<li class="pt5">${bean.note!}</li>
<div class="clearfix"></div>
</ul>
[/#list]
这里使用的是list标签pagination.list表示分页对象中的一个集合,pagination.list as bean表示将这个集合中的一个对象作为bean(名称可以任意去),这类似于java遍历集合for(Object bean:pagination.list){}
使用 FTL 标签来调用 directives 指令,比如调用 list 指令。 在语法上我们使用了两个标
签: <#list animals as being>和</#list>。
标签分为两种:
开始标签: <#directivename parametes>
结束标签: </#directivename>
除了标签以#开头外,其他都和 HTML, XML 的语法很相似。 如果标签没有嵌套内容(在
开 始 标 签 和 结 束 标 签 之 内 的 内 容 ) , 那 么 可 以 只 使 用 开 始 标 签 。 例 如 <#if something>...</#if> ,但是 FreeMarker 知道<#include something> 中
include 指令没有可嵌套的内容。
parameters 的格式由 directivename 来决定。
事实上,指令有两种类型:预定义指令和用户自定义指令。对于用户自定义的指令使用
@来代替#,比如<@mydirective parameters>...</@mydirective>。更深
的 区 别 在 于 如 果 指 令 没 有 嵌 套 内 容 , 那 么 必 须 这 么 使 用 <@mydirective
parameters />, 这和 XML 语法很相似(例如<img ... />) .但是用户自定义指令
是后面要讨论的高级主题。
像 HTML 标签一样, FTL 标签必须正确的嵌套使用。下面这段示例代码就是错的,因为
if 指令在 list 指令嵌套内容的内外都有:
注意一下 FreeMarker 仅仅关心 FTL 标签的嵌套而不关心 HTML 标签的嵌套,它只会把
HTML 看做是相同的文本,不会来解释 HTML。
如果你尝试使用一个不存在的指令(比如你输错了指令的名称), FreeMarker 就会拒绝
<h1>Welcome ${user <#-- The name of user -->}!</h1>[BR]<p>We have these animals:[BR]<ul>[BR]<#list <#-- some comment... --> animals as <#-- again... -->
being>[BR]...<ul>
<#list animals as being><li>${being.name} for ${being.price} Euros
<#if user == "Big Joe">(except for you)
</#list> <#-- WRONG! The "if" has to be closed first. -->
</#if></ul>
执行模板,同时抛出错误信息。
FreeMarker 会忽略 FTL 标签中的多余空白标记,所以你也可以这么来写代码:
当然,也不能在<, </和指令名中间插入空白标记。
指令列表和详细介绍可以参考指令参考部分(但是我建议先看表达式章节,后面将会介绍)。
注意:
通过配置,FreeMarker 可以在 FTL 标签和 FTL 注释中,使用[和]来代替<和>,就像[#if
user == "Big Joe"]...[/#if]。要获取更多信息,请参考:第四章的其它/替换
(方括号)语法部分。
注意:
通过配置, FreeMarker 可以不需要#来理解预定义指令(比如<if user == "Big
Joe">...</if>)。而我们不建议这样来使用。