您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“FreeMarker入門知識點有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“FreeMarker入門知識點有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
FreeMarker是一款基于java的模版引擎,用于生成文本(比如HTML)。它的語法和作用和JSP類似,JSP需要依賴Servlet容器(如Tomcat),而FreeMarker只需要Java運行環境。
官方網站上的這張圖很形象的說明了FreeMarker的用途和工作原理:模版+數據=文本(HTML)
在Jspxcms中,模版就是/template/1/default/目錄下的模版文件(后綴也是.html),數據來自SpringMVC Controller的Model.addAttribute(String name, Object value)或者Jspxcms自定義標簽(如:[@InfoList node='news';list]...[/@InfoList])。
更多資料可以參考FreeMarker官方網站的文檔,FreeMarker官方還提供了FreeMarker中文文檔。
和JSP的EL表達式基本是一樣的:${myname},${user.username}。
獲取Map值。${customs['abc']}
獲取數組值。${arr[0]}
算術運算。+ - * / %。如:${100 – x*x} ${x/2} ${12%10}
比較運算。< <= >= > == = != 或者 lt lte gt gte
邏輯運算。|| && !
內建函數是FreeMarker的一大優勢,很多在JSP里面需要通過復雜處理才能實現的功能,這里只需要用簡單的內建函數就搞定了。
null值處理。${mouse!"No mouse"} ${username!"匿名用戶"}。FreeMarker中輸出null值會報錯,如果希望對象為null時,什么都不顯示且不報錯,可以這樣處理 ${mouse!} ${user.username!} ${(user.username)!}(最后一種方式可以避免user對象為null導致的錯誤)。
布爾值處理。${foo?string("yes", "no")}
日期處理。${lastUpdated?string("yyyy-MM-dd HH:mm:ss")}
HTML轉義。${username?html}。為避免直接輸出< >等值,導致XSS攻擊,通常會對輸出的值進行轉義。
JS轉義。${foo?js_string}。對js中的引號等字符進行處理,給js變量賦值是非常有用,比如var s = "${foo?js_string}"。
獲取子串。${'abc'?substring(2)} ${username?substring(0,3)}
獲取字符串長度。${'abc'?length} ${username?length}
獲取列表大小。${list?size}
小寫轉換。${"GrEeN MoUsE"?lower_case}
大寫轉換。${"GrEeN MoUsE"?upper_case}
FreeMarker標簽類似JSP標簽。標簽默認使用尖括號< >,在Jspxcms中為了避免和HTML標簽混淆,便于在Dreamweaver中編輯,使用中括號[ ]作為標簽符號。以下示例一律使用中括號。
標簽有兩種,一種是系統自帶標簽,以[#開頭;一種是自定義標簽,以[@開頭。
注釋標簽:[#-- 這是需要注釋的代碼 --]
以InfoList標簽為例說明。
[@InfoList node='news';infos] [#list infos as info] <a href="${info.url}">${info.title}</a> [/#list] [/@InfoList] [@InfoList node='news';list] [#list list as bean] <a href="${bean.url}">${bean.title}</a> [/#list] [/@InfoList] [@InfoList;list] [#list list as bean] <a href="${bean.url}">${bean.title}</a> [/#list] [/@InfoList]
標簽名稱InfoList。用于獲取文檔列表的標簽。
參數node='news'。node是參數名,'news'是參數值。意為獲取欄目代碼為news的文檔。有時候參數不是必須的。
返回值;infos。分號;后面的是返回值。infos是標簽返回的對象。標簽獲取的文檔列表就存放在這個對象里,這個對象的名稱可以隨意定義。
[#if 2>1] ... [#elseif username=="abc"] ... [#elseif username?starts_with("red")] ... [#else] ... [/#if]
判斷是否為null:[#if username??]...[/#if]
[#list sequence as item] ... [/#list] [#list 1..10 as i] ... [/#list]
獲取循環的序號${item_index} ${item_index + 1}。
判斷是否還有下一個對象[#if item_has_next]...[/#if]
sequence as item和item_index、item_has_next中的item必須一致,如果sequence as info,則用${info_index}、${info_has_next}。
[#list seq as x] ${x} [#if x = "spring"][#break][/#if] [/#list]
[#include "/common/copyright.ftl"] [#include "/common/navbar.html" parse=false /]
parse。布爾值,默認true。是否解析包含的模版。如果想包含一個純文本的文件,不解析里面的內容,可以設置為false。
[#assign myname="abc"] [#assign myname=username] [#assign myname]孔子[/#assign]
為了避免跨站腳本攻擊(XSS),通常會對輸出的內容做HTML轉義,比如${foo?html}。但是所有變量都要做這個轉義不僅麻煩,還容易遺忘。另外FreeMarker空值處理也很麻煩且容易遺忘,比如${foo!}、${(user.username)!}。
使用excape標簽可以很好的解決這個問題。
[#escape x as (x)!?html] ... ${user.username} ... [/#escape]
只要被這個標簽包含的代碼,都相當于加上了${(foo.bar)!?html},如${user.username}相當于${(user.username)!?html}。即包含了空值處理,也包含了HTML轉義處理。
在escape標簽內有對象不需要轉義時,可以用noescape標簽。
[#escape x as (x)!?html] ... [#noescape]${text}[/#noescape] ... [/#escape]
讀到這里,這篇“FreeMarker入門知識點有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。