FreeMarker - 常用指令和宏

简介: FreeMarker - 常用指令和宏

【1】list、break指令

语法格式如下:

<#list sequence as item>
  ...
</#list>

item_index:当前变量的索引值.

item_has_next:是否存在下一个对象.

示例如下:

<#list ["星期一","星期二","星期三","星期四","星期五","星期六"] as x>
${x_index + 1}.${x}
<#if x_has_next>,</#if>
<#if x="星期四"><#break></#if>
</#list>

输出结果如下:

1.星期一,
2.星期二,
3.星期三,
4.兴趣四,

【2】import指令

语法格式如下:

<#import path as mapObject>

path:指定要被导入的模板文件;

mapObject:是一个Map对象。

意思:将path路径中的变量都放在mapObject中.

示例如下:

<#import "/lib/common.ftl" as com>

【3】assign指令

assign指令在前面已经使用了多次,它用于为该模板页面创建或替换一个顶层变量。

assign指令的用法有多种,包含创建或替换一个顶层变量,或者创建或替换多个变量等。


它的最简单的语法如下:

<#assign name=value [in namespacehash] />

这个用法用于指定一个名为name的变量,该变量的值为value。

此外,FreeMarker允许在使用assign指令里增加in子句, in子句用于将创建的name变量放入namespacehash命名空间中。



assign指令还有如下用法:

<#assign name1=value1 name2=value2 ... nameN=valueN [in namespacehash] />


这个语法可以同时创建或替换多个顶层变量。


此外,还有一种复杂的用法。

如果需要创建或替换的变量值是一个复杂的表达式, 则可以使用如下语法格式:

<#assign name [in namespacehash]>capture this</#assign>


在这个语法中,是指将assign指令的内容赋值给name变量.如下例子:

     <#assign x>
      <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]as n>
      ${n}
      </#list>
      </#assign>
      ${x}


上面的代码将产生如下输出:

星期一 星期二 星期三 星期四 星期五 星期六 星期天

虽然assign指定了这种复杂变量值的用法,但是我们也不要滥用这种用法。

如下例子:

<#assign x>Hello ${user}!</#assign>

以上代码改为如下写法更合适:

<#assign x="Hello ${user}!"/>

【4】宏的基本用法

示例如下一:

<#macro greet>
<font size="+2"> Hello JOE!</font>
</#macro>

使用时:

<@greet></@greet>

如果没有体内容也可以用

<@greet />

可以在宏定义之后定义参数,宏参数是局部变量,只在宏定义中有效。

示例二如下:

<#macro greet person>
<font size="+2"> Hello ${person}!</font>
</#macro>

使用时:

<@greet person="emma"> and <@greet person="LEO">

输出结果如下:

<font size="+2"> Hello emma!</font>
<font size="+2"> Hello LEO!</font>

注意:宏的参数是FTL表达式,所以,person=emma和上面的例子中具有不同的意义,这意味着将变量emma的值传给person,这个值可能是任意一种数据类型,甚至是一个复杂的表达式。


宏可以有多个参数,使用时参数的次序是无关的,但是只能使用宏中定义的参数,并且对所有参数赋值。

示例三如下:

<#macro greet person color>
<font size="+2" color="${color}"> Hello ${person}!</font>
</#macro>

使用时:

<@greet color="black" person="emma" />正确
<@greet person="emma" />错误,color没有赋值

此时,如果在定义宏时为color定义缺省值<#macro greet person color="black">这样的话,这个使用方法就是正确的。


【5】判断对象为空

① if和”??”

示例如下:

     <#if user??>
         ${user.age}
      <#else>
          ""
     <#/if>


② $和!

示例如下:

${age!'0'}
    如果age为null,默认给'0'


【6】三目运算符

示例如下:

<li>
    <em>性别:</em>
    <span>${(resultObj.aac004=="1")?string("男","女")}</span>
</li>


目录
相关文章
|
6月前
|
JavaScript 前端开发
请详细解释一下Vue的模板语法中各个指令的具体用法。
请详细解释一下Vue的模板语法中各个指令的具体用法。
33 2
|
存储 编译器 C语言
Makefile基础教程(变量的介绍和使用)
Makefile基础教程(变量的介绍和使用)
185 0
|
6月前
|
Java
FreeMarker - 四种变量的用法
FreeMarker - 四种变量的用法
300 1
|
6月前
|
缓存 API
FreeMarker - 配置参数用法说明
FreeMarker - 配置参数用法说明
212 0
驱动代码使用Makefile的宏
驱动代码使用Makefile的宏
69 0
|
JavaScript
js 高级注释(模块注释,class注释,函数注释等)
js 高级注释(模块注释,class注释,函数注释等)
205 0
|
测试技术 Python
Airtest启动器的妙用--添加自定义的命令行参数
Airtest启动器的妙用--添加自定义的命令行参数
323 0
Freemarker教程2(表达式和常用指令)
Freemarker教程2(表达式和常用指令)
Freemarker教程2(表达式和常用指令)
|
JavaScript 前端开发 中间件
如何编写高质量的 JS 函数(2) -- 命名/注释/鲁棒篇
本文将会从函数的命名、注释和鲁棒性方面,阐述如何编写高质量的 JS 函数。
1522 0
|
JSON JavaScript 数据格式
RequireJS shim 用法说明
    RequireJS中如果使用AMD规范,在使用的过程中没有太多的问题,如果加载非AMD规范的JS文件,就需要使用Require中的shim. require.config({ paths:{ jquery:"/js/jquery2.
1184 0