91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

FreeMarker入門知識點有哪些

發布時間:2022-01-19 16:12:12 來源:億速云 閱讀:337 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“FreeMarker入門知識點有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“FreeMarker入門知識點有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

FreeMarker是一款基于java的模版引擎,用于生成文本(比如HTML)。它的語法和作用和JSP類似,JSP需要依賴Servlet容器(如Tomcat),而FreeMarker只需要Java運行環境。

官方網站上的這張圖很形象的說明了FreeMarker的用途和工作原理:模版+數據=文本(HTML)

FreeMarker入門知識點有哪些

在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

  • 邏輯運算。|| && !

內建函數(Built-in)

內建函數是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}

標簽(Directive)

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(判斷標簽)

[#if 2>1]
  ...
[#elseif username=="abc"]
  ...
[#elseif username?starts_with("red")]
  ...
[#else]
  ...
[/#if]

判斷是否為null:[#if username??]...[/#if]

list(列表標簽)

[#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}。

break(跳出標簽)

[#list seq as x]
    ${x}
    [#if x = "spring"][#break][/#if]
[/#list]

include(包含標簽)

[#include "/common/copyright.ftl"]
[#include "/common/navbar.html" parse=false /]
  • parse。布爾值,默認true。是否解析包含的模版。如果想包含一個純文本的文件,不解析里面的內容,可以設置為false。

assign(定義變量標簽)

[#assign myname="abc"]
[#assign myname=username]
[#assign myname]孔子[/#assign]

escape(轉義標簽)

為了避免跨站腳本攻擊(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轉義處理。

noescape(不轉義標簽)

在escape標簽內有對象不需要轉義時,可以用noescape標簽。

[#escape x as (x)!?html]
    ...
    [#noescape]${text}[/#noescape]
    ...
[/#escape]

讀到這里,這篇“FreeMarker入門知識點有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五河县| 三都| 鄂伦春自治旗| 迁安市| 祁东县| 陆河县| 临武县| 柘荣县| 沛县| 六枝特区| 随州市| 石首市| 娱乐| 菏泽市| 岳西县| 合川市| 河北省| 松滋市| 巴南区| 昌吉市| 华阴市| 江津市| 绥宁县| 南城县| 焦作市| 南通市| 曲周县| 冀州市| 嘉峪关市| 鹤庆县| 邓州市| 钟祥市| 东光县| 冕宁县| 芜湖县| 洛浦县| 澄江县| 额尔古纳市| 都兰县| 梁平县| 岚皋县|