FreeMarder學習總結

最常用的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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章