freemarker介紹

 

                            freemarker簡介

 首先我們在學習FreeMarker之前我們首先要了解FreeMarker是做什麼的?

 FreeMarker是一個模板引擎,一個基於模板生成文本輸出的通用工具,

 使用純Java編寫。

 FreeMarker被設計用來生成HTML Web頁面,特別是基於MVC模式的

應用程序。雖然FreeMarker具有一些編程的能力,

 但通常由Java程序準備要顯示的數據,由FreeMarker生成頁面,通過

模板顯示準備的數據,通俗一點來講,FreeMarker就是一種基於模板的

 用來生成輸出文本的通用工具,基於Java的開發包和類庫用來生成輸

出文本的通用工具,基於Java的開發包和類庫。

 講了這麼多,那麼FreeMarker到底如何使用,它的優點兒在哪兒,我

們爲什麼要使用它

 接下來,根據我這一段時間的學習及在項目中的應用下面對

FreeMarker的認知,做一個簡單的介紹:

1.爲什麼要用freemarker?它的特性有哪些?

        微笑  特性:  

       1).分離表現層和業務邏輯

           使用JSP開發過程中在頁面中大量的存在業務邏輯的代碼,使得頁

面內容凌亂,在後期大量的修改維護過程中就變得非常困難

           FreeMarker根本不支持Java腳本代碼,而是使用el表達式來輸出展

示數據。FreeMarker的設計初衷就是:。模板+數據模型=輸出,

     模板只負責數據在頁面中的表現,不涉及任何的邏輯代碼,而所有的邏

輯都是由數據模型來處理的。

          用戶最終看到的輸出是模板和數據模型合併後創建的。
        2).智能的國際化和本地化

           字符集智能化(內部使用UNICODE)、數字格式本地化敏感、日期

和時間格式本地化敏感、非US字符集可以用作標識(如變量名)

     多種不同語言的相同模板
        3).提高開發效率

           在我們以往的開發中,使用的都是JSP頁面來展示數據的,即所謂的

表現層。我們都知道,JSP在第一次執行的時候需要轉換成Servlet類,

     開發階段進行功能調適時,需要頻繁的修改JSP,每次修改都要編譯和轉

換,那麼試想一天中我們浪費在程序編譯的時間有多少。

     相對於JSP來說,FreeMarker模板技術不存在編譯和轉換的問題,所以就

不會存在上述問題。而且開發過程中,

          我們在不必在等待界面設計開發人員完成頁面原形後,我們再來開發程序。
        4). 分工明確

           以往用JSP展現數據時,程序員並不熟悉界面設計技術,反之界面開發

人員,也並不熟悉程序語言。協調工作很困難

      使用FreeMarker後,作爲界面開發人員,只專心創建HTML文件、圖像以及

Web頁面的其他可視化方面,不用理會數據;

            而程序開發人員則專注於系統實現,負責爲頁面準備要顯示的數據。

首先我們來對Freemarker有一個初略的認識,在這一章中,我們要學會如何寫出

一個簡單但是非常有效的Freemarker模板。

模板 + 數據類型 = 輸出

 

2.freemarker模板文件組成

 

①、文本,直接輸出的部分
②、註釋,即<#--...-->格式不會輸出
③、FTL指令:FreeMarker指令,和HTML標記類似,名字前加#予以區分,不會輸出
④、插值(Interpolation):即${..}或者#{..}格式的部分,將使用數據模型中的部分替代輸出

 

   FTL指令規則:

 

FreeMarker有三種FTL標籤,這和HTML的標籤是完全類似的 開始標籤:<#directivename parameters> 結束標籤:</#directivename> 空標籤: <#directivename parameters />

實際上,使用標籤時前面的#符號也可能變成@,如果該指令是一個用戶指令而

不是系統內建指令時,應將#符號改爲@符號。

   

     插值規則:  

 

FreeMarker的插值有如下兩種類型
1、通用插值:${expr}
2、數字格式化插值:#{expr}或者#{expr;format}

 

   3.表達式:

 

 

  表達式是FreeMarker的核心功能。表達式放置在插值語法(${...})之中時,

表面需要輸出表達式的值,表達式語法也可以與FreeMarker標籤結合,用於控制輸出

1、直接指定值 a、字符串: ${"我的文件保存在d\\"}; b、數值 c、布爾值 d、日期型

FreeMarker支持datetimedatetime三種類型,這三種類型的值無法直接

指定,通常需要藉助字符串的datetimedatetime三個內建函數進行轉換纔可以

<#assigntest1 = "2015-01-22"?date("yyyy-MM-dd")/>;   <#assign test2="16:34:43"?time("HH:mm:ss") />   <#assigntest2 = "2015-01-2217:23:45"?datetime("yyyy-MM-dd HH:mm:ss") />   ${test1?string.full} e、集合  集合以方括號包括,各集合元素之間以英文逗號(,)分隔,看如下的示例:       <#list["星期一",,["星期二",["星期三",["星期四",["星期五"] as x>          ${s};         </#list> fMap集合

         Map對象使用花括號包括,Map中的key-value對之間以英文冒號(:)隔開,

多組key-value對之間以英文逗號(,)隔開:

<#assign score = {"語文":78,"數學":83,"Java":89} >     <#list score?key as x>      ${x}--->${score[x]};     </#list>   

 <spanstylespanstyle="font-family:sans-serif,arial,verdana,trebuchet ms;

line-height:1.6em"> </span>  

2、輸出變量值

       FreeMarker的表達式輸出變量時,這些變量可以是頂層變量,也可以是

Map對象中的變量,還可以是集合中的變量,並可以使用點(.)語法來訪問Java對象的屬性

      a、頂層變量 Map root = newHashMap();   root.put("name","wenchao");  

       對應頂層變量,直接使用${variableName}來輸出變量值,變量名只能是

數字、字母、下劃線、$@#的組合,並不能以數字開頭

     b、輸出集合元素

       如果需要輸出集合元素,則可以根據集合元素的索引來輸出元素。集合元

素的索引以方括號指定。

       假設有集合對象爲:["星期一","星期二","星期三","星期四","星期五","星期六"],

該集合對象名爲week,如果需要輸出星期三,則可以使用如下語法:

     ${week[2]}        集合裏的第一個元素的索引是0     c、輸出Map元素

         這裏的Map對象可以是直接HashMap的實例,甚至包括JavaBean實例,對

JavaBean實例,我們一樣可以把其當成屬性爲key,屬性爲valueMap實例         

 3、空值處理運算符

        FreeMarker對空值的處理非常嚴格,FreeMarker的變量必須有值,沒有被賦

值的變量就會拋出異常。    

4listmap操作、運算符

 

 

4.freemarker常用指令:

 

 

 1if指令 <#if(columns?size>10)>   <#ifpo_index%2==0>   ….   </#if>   <#else>   …   </#if>   2switchcasedefaultbreak指令

     雖然FreeMarker提供了switch指令,但它並不推薦使用switch指令來控制也

輸出,而是推薦使用FreeMarkerif..elseif..else指令來替代它。

3listbreak指令

    list指令時一個典型的迭代輸出指令,用於迭代輸出數據模型中的集合。list

令的語法格式如下:

<#list sequenceas item>     ...   </#list>         除此之外,迭代集合對象時,還包括兩個特殊的循環變量:             aitem_index:當前變量的索引值。             bitem_has_next:是否存在下一個對象             也可以使用<#break>指令跳出迭代  4include指令

        include指令的作用類似於JSP的包含指令,用於包含指定頁,include

指令的語法格式如下

         <#include filename [options]          在上面的語法格式中,兩個參數的解釋如下           afilename:該參數指定被包含的模板文件

          boptions:該參數可以省略,指定包含時的選項,包含encoding

parse兩個選項,encoding指定包含頁面時所使用的解碼集,而parse指定被

            包含是否作爲FTL文件來解析。如果省略了parse選項值,則該選項值默認是true 5 import指令

       該指令用於導入FreeMarker模板中的所有變量,並將該變量放置在指定

Map對象中,import指令的語法格式如下

        <#import path as mapObject>

       在上面的語法格式中,path指定要被導入的模板文件,而mapObject

一個Map對象名,通過這行代碼,將導致path模板中的所有變量都被放置

       mapObject         <#import "/lib/common.ftl"as com> 6noparse指令

         noparse指令指定FreeMarker不處理該指令裏包含的內容,該指令

的語法格式如下:

<#noparse>      ...   </#noparse>   7assign指令        它用於爲該模板頁面創建或替換一個頂層變量  8setting指令        該指令用於設置FreeMarker的運行環境,該指令的語法格式如下:         <#setting name = value>         name的取值範圍包括如下幾個          locale:該選項指定該模板所用的國家/語言選項          number_format:該選項指定格式化輸出數字的格式          boolean_format:該選項指定兩個布爾值的語法格式,默認值是"truefalse"         date_format,time_format,datetime_format:該選項指定格式化輸出日期的格式          time_zone: 設置格式化輸出日期時所使用的時區  ------------------------------------------------------------------------------------------------------------------------------------------------------      以上,是簡單的freemaker的使用,通過使用freemaker幫助我們更便捷的開發。

 

 

   

                   
                 
                 
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   

 

     

  

 

 

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