FreeMarker 指令

来源:互联网 发布:展示实时数据 时间轴 编辑:程序博客网 时间:2024/05/21 15:06

概念

概念 描述 sequence 序列,对应java里的list、数组等非键值对的集合 hash 键值对的集合,对应java里的map集合 namespace 对一个ftl文件的引用,利用这个名字可以访问到该ftl文件的资源

基本指令

setting指令

该指令用于设置FreeMarker的运行环境,该指令的语法格式如下:<#setting name=value>,在这个格式中,name的取值范围如下所示:

取值 含义 locale 该选项指定该模板所用的国家/语言选项 number_format 指定格式化输出数字的格式 boolean_format 指定两个布尔值的语法格式,默认值是true,false date_format,time_format,datetime_format 定格式化输出日期的格式 time_zone 设置格式化输出日期时所使用的时区

assign指令

<#assign name=value> <#assign name1=value1 name2=value2 ... nameN=valueN> <#assign same as above... in namespacehash> <#assign name>   capture this </#assign> <#assign name in namespacehash>   capture this </#assign>

生成变量,并且给变量赋值:

<!-- 示例: -->给seasons赋予序列值: <#assign seasons = ["winter", "spring", "summer", "autumn"]> 给变量test加1: <#assign test = test + 1> 给my namespage 赋予一个变量bgColor,下面可以通过my.bgColor来访问这个变量: <#import "/mylib.ftl" as my> <#assign bgColor="red" in my> 将一段输出的文本作为变量保存在x里: <#assign x>Hello ${user}!</#assign> 同时也支持中文赋值,如: <#assign 语法>   java</#assign> ${语法}<!-- 输出结果是: -->java

if指令

这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下:

<#if condition>... <#elseif condition>... <#else> ... </#if><!-- 示例: --><#if animals.python.price < animals.elephant.price>  Pythons are cheaper than elephants today.<#elseif animals.python.price > animals.elephant.price>  Elephants are cheaper than pythons today.<#else>  Elephants and pythons cost the same today.</#if>

list指令

list指令是一个迭代输出指令,用于迭代输出数据模型中的集合,list指令的语法格式如下:

<#list sequence as item> ... </#list> <!-- 示例: --><ul><#list misc.fruits as fruit>  <li>${fruit}</#list></ul>

(list, items[列表条目], sep[分隔符], else) 指令可以一起使用,就像下面这样:

<#list misc.fruits>  <p>Fruits:  <ul>    <#items as fruit>      <li>${fruit}<#sep> and</#sep>    </#items>  </ul><#else>  <p>We have no fruits.</#list>

include指令

<#include filename>     or <#include filename options> <!-- 示例: -->File: /common/copyright.ftl    Copyright 2001-2002 ${me}<br><#assign me="Juila Smith"> <h1>home page</h1> <hr> <#include "/common/copyright.ftl" encoding="UTF-8"> <!-- 输出结果: --> <h1>home page</h1> <hr> Copyright 2001-2002 Juila Smith 
options包含两个属性:encoding="GBK" 编码格式 parse=true     是否作为FTL语法解析,默认是true. false就是以文本方式引入注意在ftl文件里布尔值都是直接赋值的如parse=true,而不是parse=”true” 

switch指令

它常和 case, default, break指令一起使用

<#switch value>   <#case refValue1>     ...     <#break>   <#case refValue2>     ...     <#break>   ...   <#case refValueN>     ...     <#break>   <#default>     ... </#switch>

compress指令

用来压缩空白空间和空白的行

<#compress>   ... </#compress><!-- 示例: --><#assign x = "    moo  \n\n   "> (<#compress>   1 2  3   4    5   ${moo}   test only   I said, test only </#compress>) <!-- 输出结果是: -->(1 2 3 4 5 moo test only I said, test only) 

escape, noescape指令

主要使用在相似的字符串变量输出。比如某一个模块的所有字符串输出都必须是html安全的,这个时候就可以使用该表达式:

<#escape identifier as expression>   ...   <#noescape>...</#noescape>   ... </#escape><!-- 示例: --><#escape x as x?html>   First name: ${firstName}   <#noescape>Last name: ${lastName}</#noescape>   Maiden name: ${maidenName} </#escape> <!-- 相同表达式: -->First name: ${firstName?html} Last name: ${lastName } Maiden name: ${maidenName?html} 

import指令

类似于java里的import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件

<#import path as hash> 假设mylib.ftl里定义了宏copyright那么我们在其他模板页面里可以这样使用 <#import "/libs/mylib.ftl" as my> // "my"在freemarker里被称作namespace<@my.copyright date="1999-2002"/>

内置函数

内置函数就像java中的方法,访问他们必须使用“?”代替,明确其来自哪里。

内置函数 描述 示例 obj?html html特殊字符转义 & 将会被替换成 &amp obj?upper_case 大写转换 “John Doe” 将会转换成 “JOHN DOE” obj?cap_first 首字母大写 “john” 将会转换成 “John” obj?length 计算字符串长度 “John Doe” length=8 fruits?size 计算序列条目的数量 misc/fruits/orange,banana size=2 <#list animals as animal> list指令下内置函数: animal?index 位置索引,从0开始 animal?counter 计数器 animal?item_parity 依据计数器,给出”odd”/”even”(奇/偶)字符串 间色表格 一些内置函数需要用参数指定更多行为: animal.protected?string("Y", "N") 根据animal.protected的布尔值返回”Y”/”N”字符串 animal?item_cycle('lightRow', 'darkRow') 是item_parity早时更通用的变体 fruits?join(", ") 将序列条目转换称字符串形式,转换中在每两个条目中加分隔符”,” “orange, banana” obj?starts_with("J") 判断obj是否以字符J开头,返回true/false

处理遗失参数

默认值

<!--     示例:    当user参数遗失时,使用"visitor"作为默认值 --><h1>Welcome ${user!"visitor"}!</h1>

忽略处理

<!--     示例:    当user参数遗失时,忽略处理指令内部操作--><#if user??><h1>Welcome ${user}!</h1></#if>

参考链接:官方指南

0 0
原创粉丝点击