freemarker常見語法大全


FreeMarker的插值有如下兩種類型:1,通用插值${expr};2,數字格式化插值:#{expr}或#{expr;format}
${book.name?if_exists } //用于判斷如果存在,就輸出這個值
${book.name?default(‘xxx’)}//默認值xxx
${book.name!"xxx"}//默認值xxx
${book.date?string('yyyy-MM-dd')} //日期格式
${book?string.number} 20 //三種不同的數字格式
${book?string.currency}--<#-- $20.00 -->
${book?string.percent}—<#-- 20% -->

<#assign foo=ture /> //聲明變量,插入布爾值進行顯示
${foo?string("yes","no")} <#-- yes -->

大小比較符號使用需要注意:(xml的原因),可以用于比較數字和日期
使用lt、lte、gt和gte來替代<、<=、>和>= 也可以使用括號<#if (x>y)>

內置函數: 調用區別于屬性的訪問,使用?代替.
常見的一些內置函數
對于字符串
html-對字符串進行HTML編碼
cap_first-使字符串第一個字母大寫
lower_case-將字符串轉換成小寫
trim-去掉字符串前后的空白字符

示例:${“freeMarker”?cap_first}?

?

對于Sequences(序列)
size-獲得序列中元素的數目

對于數字
int-取得數字的整數部分(如-1.9?int的結果是-1)

對于集合,可以使用數組的方式,使用下標索引進行訪問

邏輯判斷:
if................

<#if condition>...
<#elseif condition2>...
<#elseif condition3>......
<#else>...
Boolean類型的空值判斷
空值判斷可以寫成<#if book.name?? > //注意${}為變量的渲染顯示,而<>為定義等操作符的定義

switch............
<#switch value>
<#case refValue1>
...
<#break>
<#case refValue2>
...
<#break>
...
<#case refValueN>
...
<#break>
<#default>
...
</#switch>

快速定義int區間的集合
<#assign l=0..100/> //注意不需要[]

3:循環讀取集合: 注意/的使用
<#list student as stu>
${stu}<br/>
</#list>
與jstl循環類似,也可以訪問循環的狀態
item_index:當前變量的索引值
item_has_next:是否存在下一個對象 其中item名稱為as后的變量名,如stu

集合長度判斷
<#if student?size != 0></#if> 判斷=的時候,注意只要一個=符號,而不是==

宏/模板
初步了解: 使用更像一個閉包closure,可以定義后,在腳本中任意地方引用,并原地起作用
<#macro greet>
<font size="+2">Hello Joe!</font>
</#macro>
使用的方式為:
<@greet></@greet> //同xml可以簡寫成<@greet/>

宏的參數定義,類似js,在宏名后 帶參數進行傳遞定義
<#macro greet person color>
${person}
</#macro>

調用帶參數時,注意使用類似XML的屬性格式進行傳遞,不需要關心順序問題
<@greet person="Fred" color="black"/>

參數默認值定義,如果沒有,就必須要求傳遞完整的參數列表
<#macro greet person color="black">
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>

使用xml的嵌套內容進行傳遞宏調用,關鍵標簽 <#nested>
<#macro border>
<table border=4 cellspacing=0 cellpadding=4><tr><td>
<#nested>
</tr></td></table>
</#macro>

調用時:
<@border>The bordered text</@border>

<#nested> 標簽可以在宏中多次調用,也可以將多個宏組合進行嵌套

for循環的精簡版:
<#list 1..count as x>
</#list>

宏的循環變量,配合嵌套標簽進行參數傳遞,
<#macro repeat count>
<#list 1..count as x>
<#nested x, x/2, x==count> //這里的三個參數,將會傳遞到嵌套內容中
</#list>
</#macro>

<@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if> //這里的內容由macro中的<#nested>進行參數的傳遞,傳遞的數量任意,當注意需要宏接受這些
</@repeat>
上述還需要注意;的使用

參數的數量是可變的,并不要求全部都有,但是效果不同

在模板中定義變量
在模板中定義的變量有三種類型:
plain變量:可以在模板的任何地方訪問,包括使用include指令插入的模板,使用assign指令創建和替換。
局部變量:在宏定義體中有效,使用local指令創建和替換。
循環變量:只能存在于指令的嵌套內容,由指令(如list)自動創建;宏的參數是局部變量,而不是循環變量

<#assign x = "plain"> //全局的plain變量
內部循環變量將會隱藏同名的外部循環變量

外部導入的使用,可以用于模塊化,并且提供公用性
如:lib/my_lib.ftl文件
<#macro copyright date>
<p>Copyright (C) ${date} Julia Smith. All rights reserved.
<br>Email: ${mail}</p>
</#macro>
<#assign mail = "jsmith@acme.com">

lib/my_inc.ftl文件
<#import "/lib/my_test.ftl" as my>
<#assign mail="fred@acme.com">
<@my.copyright date="1999-2002"/>
${my.mail}
${mail}
輸出結果將不會出現沖突

對于庫中的變量修改,使用in關鍵字
<#assign mail="jsmith@other.com" in my>

函數定義:區別于宏對象,帶返回值
<#function name param1 param2><#return val></#function>函數,有返回參數

stringA[M .. N] 取子字符串,類似substring(stringA, M, N)

<#include "/copyright_footer.html"> 導入其他頁面元素
<#include filename options>
options包含兩個屬性
encoding=”GBK” 編碼格式
parse=true 是否作為ftl語法解析,默認是true,false就是以文本方式引入.注意在ftl文件里布爾值都是直接賦值的如parse=true,而不是

parse=”true”

hash與list的定義
<#assign c= {"a":"orz","b":"czs"}>
${c.a}

List片段可以采用: products[10..19] or products[5..] 的格式進行定義,當只局限于數字
<#assign c= [1,2,3,4,5,6,6,7]>
<#list c[1..3] as v>
${v}
</#list>

對變量的缺省處理
product.color!"red"

用compress directive或者transform來處理輸出。
<#compress>...</#compress>:消除空白行。
<@compress single_line=true>...</@compress>將輸出壓縮為一行。都需要包裹所需文檔

freemarker可用"["代替"<".在模板的文件開頭加上[#ftl].

注釋部分
<#-- 注釋部分 -->

數字輸出的另外一種方式
#{c.a;m0} 區別于${},這個例子是用于輸出數字的格式化,保留小數的位數,詳細如下

數字格式化插值可采用#{expr;format}形式來格式化數字,其中format可以是:
mX:小數部分最小X位
MX:小數部分最大X位

在定義字符串的時候,可以使用''或者"",對特殊字符,需要使用\進行轉義

如果存在大量特殊字符,可以使用${r"..."}進行過濾
${r"${foo}"}
${r"C:\foo\bar"}

Map對象的key和value都是表達式,但是key必須是字符串
可以混合使用.和[""]訪問
book.author["name"] //混合使用點語法和方括號語法

為了處理缺失變量,FreeMarker提供了兩個運算符: 用于防止對象不存在而導致的異常
!:指定缺失變量的默認值
??:判斷某個變量是否存在,返回boolean值

noparse指令指定FreeMarker不處理該指定里包含的內容,該指令的語法格式如下:
<#noparse>...</#noparse>

${firstName?html} 使用html對字符進行格式化處理,對于<等的過濾

escape , noescape指令,對body內的內容實用統一的表達式
看如下的代碼:
<#escape x as x?html>
First name:${firstName}
Last name:${lastName}
Maiden name:${maidenName}
</#escape>
上面的代碼等同于:
First name:${firstName?html}
Last name:${lastName?html}
Maiden name:${maidenName?html}

定義全局變量的方式
<#assign name1=value1 name2=value2 / > // 可以同時定義多個變量,也可以使用循環來給變量賦值
<#assign x>
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
${n}
</#list>
</#assign>
${x}

setting指令,用于動態設置freeMarker的運行環境:

該指令用于設置FreeMarker的運行環境,該指令的語法格式如下:<#setting name=value>,在這個格式中,name的取值范圍包含如下幾個:
locale:該選項指定該模板所用的國家/語言選項
number_format:指定格式化輸出數字的格式
boolean_format:指定兩個布爾值的語法格式,默認值是true,false
date_format,time_format,datetime_format:指定格式化輸出日期的格式
time_zone:設置格式化輸出日期時所使用的時區

<#return> 用于退出宏的運行

?html 用于將字符串中可能包含的html字符,進行過濾.

調用Java方法,需要使用實現TemplateMethodModel接口,但是好像會覆蓋掉屬性的訪問

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249449.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249449.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249449.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網頁排版與布局

一 網站的層次結構 制作便于瀏覽頁面的一個大敵就是視覺干擾,它包含兩類: a,混亂頁面主次不清,所有東西都引人注目 b,背景干擾 1.把頁面分割成清晰明確的不同區域很重要,因為可以使用戶迅速判斷出哪些區域應重點看,哪些可以放心地忽略. 2.創建清晰直觀的頁面層次結構;越重要越要…

Bash的循環結構(for和while)

在bash有三中類型的循環結構表達方法&#xff1a;for&#xff0c;while&#xff0c;until。這里介紹常用的兩種&#xff1a;for和while。 for bash的for循環表達式和python的for循環表達式風格很像&#xff1a; for var in $(ls) doecho "$var"done 取值列表有很多種…

MVVM模式下實現拖拽

MVVM模式下實現拖拽 原文:MVVM模式下實現拖拽在文章開始之前先看一看效果圖 我們可以拖拽一個"游戲"給ListBox,并且ListBox也能接受拖拽過來的數據&#xff0c; 但是我們不能拖拽一個"游戲類型"給它。 所以當拖拽開始發生的時候我們必須添加一些限制條件&a…

nodejs變量

https://www.cnblogs.com/vipyoumay/p/5597992.html

jenkins+Docker持續化部署(筆記)

參考資料&#xff1a;https://www.cnblogs.com/leolztang/p/6934694.html &#xff08;Jenkins&#xff08;Docker容器內&#xff09;使用宿主機的docker命令&#xff09; https://container-solutions.com/running-docker-in-jenkins-in-docker/ &#xff08;Running Docker i…

正則表達式之括號

正則表達式&#xff08;三&#xff09; 括號 分組 量詞可以作用字符或者字符組后面作為限定出現次數&#xff0c;如果是限制多個字符出現次數或者限制一個表達式出現次數&#xff0c;需要使用括號()將多個字符或者表達式括起來&#xff0c;這樣便稱為分組。例如(ab)表示“ab”字…

免安裝Mysql在Mac中的神坑之Access denied for user 'root'@'localhost' (using password: YES)

眼看馬上夜深人靜了&#xff0c;研究了一天的問題也塵埃落定了。 廢話不多說 直接來干貨&#xff01; 大家都知道免安裝版本的Mysql, 在Mac中安裝完成&#xff08;如何安裝詳見Mac OS X 下 TAR.GZ 方式安裝 MySQL&#xff09;之后&#xff0c;在登錄時會遇到沒有訪問權限的問題…

nodejs函數

https://www.cnblogs.com/yourstars/p/6121262.html

[HNOI2009]夢幻布丁

題目描述 N個布丁擺成一行,進行M次操作.每次將某個顏色的布丁全部變成另一種顏色的,然后再詢問當前一共有多少段顏色.例如顏色分別為1,2,2,1的四個布丁一共有3段顏色. 第一行給出N,M表示布丁的個數和好友的操作次數. 第二行N個數A1,A2...An表示第i個布丁的顏色從第三行起有M行,…

用jquery實現html5的placeholder功能

版權聲明&#xff1a;本文為博主原創文章。未經博主同意不得轉載。 https://blog.csdn.net/QianShouYuZhiBo/article/details/28913501 html5的placeholder功能在表單中經經常使用到。它主要用來提示用戶輸入信息&#xff0c;當用戶點擊該輸入框之后&#xff0c;提示文字會自己…

mac環境下node.js和phonegap/cordova創建ios和android應用

mac環境下node.js和phonegap/cordova創建ios和android應用 一介布衣 2015-01-12 nodejs 6888 分享到&#xff1a;QQ空間新浪微博騰訊微博人人網微信引用百度百科的一段描述:PhoneGap是一個用基于HTML&#xff0c;CSS和JavaScript的&#xff0c;創建移動跨平臺移動應用程序的…

java中多線程 - 多線程中的基本方法

介紹一下線程中基本的方法使用 線程睡眠sleep() Thread.sleep(毫秒);我們可以通過sleep方法設置讓線程睡眠。可以看到sleep是個靜態方法 public static native void sleep(long var0) throws InterruptedException; try {System.out.println(new Date().getSeconds());Thread.s…

nodejs匿名函數

https://www.cnblogs.com/sharpest/p/8056232.html

Deployment descriptor

Deployment descriptor 是指一種配置文件用于工件部署到一些container/engine。 在Java Platform&#xff0c;Enterprise Edition中&#xff0c;部署描述符描述了應如何部署組件&#xff0c;模塊或應用程序&#xff08;如Web應用程序或企業應用程序&#xff09;。它指示部署工具…

cordova 一個將web應用程序封裝成app的框架

cordova 一個將web應用程序封裝成app的框架 cordova的詳細介紹請參考這個鏈接&#xff1a;http://www.zhoujingen.cn/blog/7034.html 我接下來主要將如何搭建。 1.首先你需要下載幾樣東西 1.jdk. 2.android_SDK. 2.安裝這兩個&#xff0c;并配置環境變量 這里jdk的環境變量配置…

windows linux 子系統折騰記

最近買了部新電腦&#xff0c;海爾n4105的一體機&#xff0c;好像叫s7。 放在房間里面&#xff0c;看看資料。因為性能孱弱&#xff0c;所以不敢安裝太強大的軟件&#xff0c;然后又有一顆折騰的心。所以嘗試了win10自帶的linux子系統。然后在應用商店搜索linux推薦debian 系統…

nodejs閉包

一、什么是閉包&#xff1f; 官方”的解釋是&#xff1a;閉包是一個擁有許多變量和綁定了這些變量的環境的表達式&#xff08;通常是一個函數&#xff09;&#xff0c;因而這些變量也是該表達式的一部分。 相信很少有人能直接看懂這句話&#xff0c;因為他描述的太學術。其實這…

《深入理解Java虛擬機》讀書筆記八

第九章 類加載及執行子系統的案例與實戰 Q&#xff1a;如果有10個WEB應用程序都是用Spring來進行組織管理的話&#xff0c;可以把Spring放到Common或Shared目錄下&#xff08;Tomcat5.0&#xff09;讓這些程序共享。Spring要對用戶程序的類進行管理&#xff0c;自然要能訪問到用…

一些非常有用的鏈接和工具

微信公眾平臺SDK Senparc.Weixin for C#&#xff0c;支持.NET Framework及.NET Core &#xff1a; https://github.com/JeffreySu/WeiXinMPSDK layui開發文檔地址&#xff1a;https://www.layui.com/doc/ .Net Core GitHub社區 &#xff1a; https://github.com/dotnetcore EF…

Activity Intent相關FLAG介紹

先首先簡單介紹下Task和Activity的關系 Task就像一個容器&#xff0c;而Activity就相當與填充這個容器的東西&#xff0c;第一個東西&#xff08;Activity&#xff09;則會處于最下面&#xff0c;最后添加的東西&#xff08;Activity&#xff09;則會在最上面。從Task中取出東西…