Freemarker學(xué)習(xí)筆記

模板基礎(chǔ)

  • 插值 ${....} :解析變量輸出真實(shí)的值
  • FTL標(biāo)簽 以#開(kāi)頭妒穴,用戶(hù)自定義標(biāo)簽以 @開(kāi)頭
  • 注釋<#!-- 注釋內(nèi)容-->
  • directives 指令:就是所謂的FTL標(biāo)簽痹兜,這些指令在和HTML中的元素中關(guān)系是一致的
  • <#if xxx> xxxx </#if><#if 條件> xxx <else> </#if>
  • include 指令: 例如 <# include "/xxxx.html"> 這樣會(huì)將這個(gè)文件解析添加到這個(gè)ftl文件中
  • 各種數(shù)據(jù)類(lèi)型的build-in
  • List 集合 指令
    <pre>
    <#list animals as being>
    <tr><td>${being.name}<td>${being.price} Euros
    </#list>
    //會(huì)被解析成下面的
    <tr><td>mouse<td>50 Euros
    <tr><td>elephant<td>5000 Euros
    <tr><td>python<td>4999 Euros
    </pre>
  • Map類(lèi)型:遍歷Map:Map mushat
    <pre>
    <#list myMapper keys as k >
    ${k} : ${myMapper[k]}
    </ #list>
    </pre>
  • 自定義Bean 通過(guò)調(diào)用屬性名字的來(lái)訪(fǎng)問(wèn)相應(yīng)屬性
<#if person??>
   name : ${person.name} 
   age  : ${person.age}
</#if>
  • 處理不存在的變量
  • 如果user 變量存在的話(huà)岛请,會(huì)將括號(hào)括中的標(biāo)簽內(nèi)容解析顯示出來(lái)
<#if object??> 
    object exist
<#else>
       object not exist
<#/if>      
  • 如果 user 變量不存在 "anonymous" 會(huì)替代填充 <h1>Welcome ${user!"Anonymous"}!</h1>
  • 子程序 P:
  • 方法和函數(shù)
  • 用戶(hù)自定義指令
  • 宏指令:

Programmer Guild

  • 在Freemarker模板中蕉鸳,可用的變量都是實(shí)現(xiàn)了freemarker.template.TemplateModel接口的Java對(duì)象。你自己的數(shù)據(jù)模型(例如你自定義的 一個(gè)JavaBean)會(huì)被替換成TemplateModel類(lèi)型。這種特性叫做Object Wraaper 對(duì)象包裝
  • 各個(gè)Freemarker支持的標(biāo)量哎Java層的實(shí)現(xiàn)
  • String : SimpleScalar
  • Hash : SimpleHash,在FTL 中,容器是一成變的阅懦。就是說(shuō)和二,你不能替換和移除容器中的子變量
  • List : SimpleSequence
  • Collection : SimpleCollection
  • Date : SimpleDate
  • Method :

定義實(shí)現(xiàn)自定義宏

定義實(shí)現(xiàn)自定義方法

  1. 首先通過(guò)繼承TemplateMethodModelEx實(shí)現(xiàn)自己要定義的方法類(lèi)
    <pre>
    public class IndexMethod implements TemplateMethodModelEx {
    @Override
    public Object exec(List arguments) throws TemplateModelException {
    if (arguments.size() != 2) {
    throw new TemplateModelException("Wrong arguments");
    }
    int result = -1;
    if (!(arguments.get(0) instanceof SimpleScalar &&arguments.get(1) instanceof SimpleScalar))
    return new SimpleNumber(result);
    String first = ((SimpleScalar)arguments.get(0)).getAsString();
    String second = ((SimpleScalar)arguments.get(1)).getAsString();

         //arguments.stream().forEach(element -> System.out.println(element));
         return new SimpleNumber(second.indexOf(first));
     }
    

    }
    </pre>

  2. 在向template 傳值時(shí)徘铝,例如將上面的 類(lèi)
    <pre>
    Map root = new HashMap();
    root.add("indexOf",new IndexMethod());
    </pre>

  3. 在flt 中這樣用
    <pre>
    <#assign x = "something">
    ${indexOf("met", x)}
    ${indexOf("foo", x)}
    </pre>

FAQ

  • SimpleHash VS DefaultMapAdapter
  • SimpleHash相對(duì)于 DefalutMapAdapter 來(lái)說(shuō),效率更高
  • 如果你從Template Entry只取出2次以下時(shí)惯吕,DefaultMapAdapter的效率高于SimpleHash.相反的就應(yīng)該使用DefaultMapAdapter

Freemarker Cache

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惕它,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子废登,更是在濱河造成了極大的恐慌淹魄,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堡距,死亡現(xiàn)場(chǎng)離奇詭異甲锡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)羽戒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)缤沦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人易稠,你說(shuō)我怎么就攤上這事缸废。” “怎么了驶社?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵企量,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我亡电,道長(zhǎng)届巩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任份乒,我火速辦了婚禮恕汇,結(jié)果婚禮上零酪,老公的妹妹穿的比我還像新娘。我一直安慰自己拇勃,他們只是感情好四苇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著方咆,像睡著了一般月腋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓣赂,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天榆骚,我揣著相機(jī)與錄音,去河邊找鬼煌集。 笑死妓肢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苫纤。 我是一名探鬼主播碉钠,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卷拘!你這毒婦竟也來(lái)了喊废?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤栗弟,失蹤者是張志新(化名)和其女友劉穎污筷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體乍赫,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓣蛀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雷厂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惋增。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖罗侯,靈堂內(nèi)的尸體忽然破棺而出器腋,到底是詐尸還是另有隱情,我是刑警寧澤钩杰,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布纫塌,位于F島的核電站,受9級(jí)特大地震影響讲弄,放射性物質(zhì)發(fā)生泄漏措左。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一避除、第九天 我趴在偏房一處隱蔽的房頂上張望怎披。 院中可真熱鬧胸嘁,春花似錦、人聲如沸凉逛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)状飞。三九已至毫胜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诬辈,已是汗流浹背酵使。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焙糟,地道東北人口渔。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像穿撮,于是被迫代替她去往敵國(guó)和親缺脉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • FreeMarker的模板文件并不比HTML頁(yè)面復(fù)雜多少,FreeMarker模板文件主要由如下4個(gè)部分組成: 1...
    年輕小伙程序員閱讀 2,952評(píng)論 0 5
  • 目錄 前言 FTL指令規(guī)則 插值規(guī)則 表達(dá)式 FreeMarker的常用指令 高級(jí)方法 前言 FreeMarker...
    garyond閱讀 4,683評(píng)論 0 8
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評(píng)論 6 342
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理混巧,服務(wù)發(fā)現(xiàn)枪向,斷路器勤揩,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 緩慢堆積的小透明樓咧党,鎮(zhèn)圖樓來(lái)自百度貼吧,侵刪致敬≥﹏≤ 黑塔利亞王耀主線(xiàn)陨亡,CP或許會(huì)有
    秋茶桑閱讀 247評(píng)論 0 0