最常用的3個概念
sequence 序列,對應java裏的list、數組等非鍵值對的集合
hash 鍵值對的集合
namespace 對一個ftl文件的引用,利用這個名字可以訪問到該ftl文件的資源
指令
if, else, elseif
switch, case, default, break
list, break
include
Import
compress
escape, noescape
assign
global
setting
macro, nested, return
常用語法
輸出:輸出對象book的name屬性:${book.name}
判斷爲空值:${book.name?if_elsets} 或者<#if book.name??>
設置默認值:${book.name?default('xxxx')}或者 ${ book.name!"xxx"}
日期格式:${book.date?string('yyyy-MM-dd')}
數字格式:${book?string.number}<#--20->
${book?string.currency}<#--$20->
${book?string.percent}<#-20%->
插入布爾值:<#assign foo = true/>
${foo?string("yes","no")}<#-yes->
邏輯判斷
<#if condition>
<elseif condition2>
</#if>
空值判斷<#if book.name??>
<#switch value>
<#case refValue1>
<#break>
<#case refValue2>
<#break>
<#default>
</#switch>
循環讀取
<#list employess as e>
${e_index}.${e.name}
<#list>
<#if mole?default(0)!=0>
壓縮空白空間和空白行
<#assign x = " moo">
<#compress>
1 2 3 4 7 9
${abcd}
test only
I said,test only
)
輸出
(1 2 3 4 7 9
abcd
test only
I said,test only
Sequence內置的計算器
顯示序列號
item_index:是list當前值的下標
item_has_next:判斷list是否還有值
<#list employees as e>
${e_index}..${e.name}
<#list>
輸出: 1.aaa
2.bbb
3.ccc
Sequence內置分段器:chunk
用途:某些比較BT的排版需求
模板:
<#assign seq = ['a','b','c','d','e','f','g','h','i']>
<#list seq?chunk(4)as row>
<ul>
<li><#list row as cell>${cell}</#list></li>
</ul>
</#list>
<#list seq?chunk(4,'---') as row>
<ul>
<li><#list row as cell>${cell}></#list></li>
</ul>
輸出
<ul><li>a</li><li>b</li><li>c</li><li>d</li><ul>
<ul><li>e</li><li>f</li><li>g</li><li>h</li><ul>
<ul><li>i</li><ul>
<ul><li>a</li><li>b</li><li>c</li><li>d</li><ul>
<ul><li>e</li><li>f</li><li>g</li><li>h</li><ul>
<ul><li>i</li><li> --- </li><li> --- </li><li> --- </li><ul>
</ul>
Freemarker的list
List 元素爲Scalar對象
<#list scalarList as value0>
Scalar 的 list值:${vlue0}
</#list>
List 元素爲Object
<#list objectList as object>
Object 的 list值:${object.name}
</#list>
Map 的Values元素爲 Scalar
<#list scalarMap?keys as mykey>
Scalar 的Map key值是:${mykey]
Scalar 的Map values 值是:${scalarMap[mykey]}
</#list>
Map 的Map Values元素爲 Object
<#list objectMap?keys as key>
<#assign mapUser="userMap[key]">
The User Object is ${mapUser}
The UserId is ${mapUser.userId}
</#list>
FreeMarker中的list 排序
升序:<#list lsit?sort_by('time') as v> ${v}</#>
降序:<#list list?sort_by('') as v>${v}></#>
Freemark在模板中定義變量
plain變量:可以在模板的任何地方訪問,包括include指令插入的模板,使用
assign指令創建和替換
<#include filename options>
options包含兩個屬性
encoding=”GBK” 編碼格式
<#import path as hash>
類似於java裏的import,它導入文件,然後就可以在當前文件裏使用被導入文件
裏的宏組件
假設mylib.ftl裏定義了宏copyright那麼我們在其他模板頁面裏可以這樣使用
<#import "/libs/mylib.ftl" as my>
<@my.copyright date="1999-2002"/>
"my"在freemarker裏被稱作namespace
parse=true 是否作爲ftl語法解析,默認是true,false就是以文本方式引入.注意在
ftl文件里布爾值都是直接賦值的如parse=true,而不是parse=”true”
<#import path as hash>
類似於java裏的import,它導入文件,然後就可以在當前文件裏使用被導入文件
裏的宏組件
<#include "/WEB-INF/index/top.html" encoding=”utf-8">
Sequence的內置函數
freemarker.properties配置
解決中文亂碼問題:
default_encoding=UTF-8
locale=zh_CN
number_format=#
提高freemarker的性能
template_update_delay=6000
freemarker的表籤種類:
${} #代表FTL tags
<#if></#if>
@,代表用戶自定義標籤
<#--- --- --- --->
註釋標誌
<#--
這裏是註釋
-->
舊版本的freemarker採用的是<#comment> 註釋 </#comment>方法
1.sequence?first 返回sequence的第一個值。
2.sequence?last 返回sequence的最後一個值。
3.sequence?reverse 將sequence的現有順序反轉,即倒序排序
4.sequence?size 返回sequence的大小
5.sequence?sort 將sequence中的對象轉化爲字符串後順序排序
6.sequence?sort_by(value) 按sequence中對象的屬性value進行排序
注意:Sequence不能爲null
二、Hash的內置函數
1.hash?keys 返回hash裏的所有key,返回結果爲sequence
2.hash?values 返回hash裏的所有value,返回結果爲sequence