最全的freemarker教程
FreeMarker的模板檔案並不比HTML頁面複雜多少,FreeMarker模板檔案主要由如下4個部分組成:
1,文字:直接輸出的部分
2,註釋:<#--...-->格式部分,不會輸出
3,插值:即${...}或#{...}格式的部分,將使用資料模型中的部分替代輸出
4,FTL指令:FreeMarker指定,和HTML標記類似,名字前加#予以區分,不會輸出
下面是一個FreeMarker模板的例子,包含了以上所說的4個部分<html><br>
<head><br> <title>Welcome!</title><br> </head><br> <body><br> <#--註釋部分--><br> <#--下面使用插值--> <h1>Welcome${user}!</h1><br> <p>Wehavetheseanimals:<br> <u1><br> <#--使用FTL指令--> <#listanimalsasbeing><br> <li>${being.name}for${being.price}Euros<br> <#list><br> <u1><br> </body><br> </html>
1. FTL指令規則
在FreeMarker中,使用FTL標籤來使用指令,FreeMarker有3種FTL標籤,這和HTML標籤是完全類似的.
1.1. 開始標籤:<#directivenameparameter>
1.2. 結束標籤:</#directivename>
1.3. 空標籤:<#directivenameparameter/>
實際上,使用標籤時前面的符號#也可能變成@,如果該指令是一個使用者指令而不是系統內建指令時,應將#符號改成@符號.
使用FTL標籤時,應該有正確的巢狀,而不是交叉使用,這和XML標籤的用法完全一樣.如果全用不存在的指令,FreeMarker不會使用模板輸出,而是產生一個錯誤訊息.FreeMarker會忽略FTL標籤中的空白字元.值得注意的是<,/>和指令之間不允許有空白字元.
2. 插值規則
FreeMarker的插值有如下兩種型別:1,通用插值${expr};2,數字格式化插值:#{expr}
2.1. 通用插值
對於通用插值,又可以分為以下4種情況:
1,插值結果為字串值:直接輸出表達式結果
2,插值結果為數字值:根據預設格式(由#setting指令設定)將表示式結果轉換成文字輸出.可以使用內建的字串函式格式化單個插值,如下面的例子:
<#settionnumber_format="currency"/>
<#assignanswer=42/>
${answer}
${answer?string}<#--thesameas${answer}-->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
${answer}
輸出結果是:
$42.00
$42.00
42
$42.00
4,200%
3,插值結果為日期值:根據預設格式(由#setting指令設定)將表示式結果轉換成文字輸出.可以使用內建的字串函式格式化單個插值,如下面的例子:
${lastUpdated?string("yyyy-MM-ddHH:mm:sszzzz")}
${lastUpdated?string("EEE,MMMd,''yy")}
${lastUpdated?string("EEEE,MMMMdd,yyyy,hh:mm:ssa'('zzz')'")}
輸出結果是:
2008-04-0808:08:08PacificDaylightTime
Tue,Apr8,'03
Tuesday,April08,2003,08:08:08PM(PDT)
4,插值結果為布林值:根據預設格式(由#setting指令設定)將表示式結果轉換成文字輸出.可以使用內建的字串函式格式化單個插值,如下面的例子:
<#assignfoo=true/>
${foo?string("yes","no")}
輸出結果是:
yes
2.2. 數字格式化插值
數字格式化插值可採用#{expr;format}形式來格式化數字,其中format可以是:
mX:小數部分最小X位
MX:小數部分最大X位
如下面的例子:
<#assignx=2.582/>
<#assigny=4/>
#{x;M2}<#--輸出2.58-->
#{y;M2}<#--輸出4-->
#{x;m2}<#--輸出2.6-->
#{y;m2}<#--輸出4.0-->
#{x;m1M2}<#--輸出2.58-->
#{x;m1M2}<#--輸出4.0-->
3. 表示式
表示式是FreeMarker模板的核心功能,表示式放置在插值語法${}之中時,表明需要輸出表達式的值;表示式語法也可與FreeMarker標籤結合,用於控制輸出.實際上FreeMarker的表示式功能非常強大,它不僅支援直接指定值,輸出變數值,也支援字串格式化輸出和集合訪問等功能.
3.1. 直接指定值
使用直接指定值語法讓FreeMarker直接輸出插值中的值,而不是輸出變數值.直接指定值可以是字串,數值,布林值,集合和MAP物件.
3.1.1. 字串
直接指定字串值使用單引號或雙引號限定,如果字串值中包含特殊字元需要轉義,看下面的例子:
${"我的檔案儲存在C:\\盤"}
${'我名字是\"annlee\"'}
輸出結果是:
我的檔案儲存在C:\盤
我名字是"annlee"
FreeMarker支援如下轉義字元:
\";雙引號(u0022)
\';單引號(u0027)
\\;反斜槓(u005C)
\n;換行(u000A)
\r;回車(u000D)
\t;Tab(u0009)
\b;退格鍵(u0008)
\f;Formfeed(u000C)
\l;<
\g;>
\a;&
\{;{
\xCode;直接通過4位的16進位制數來指定Unicode碼,輸出該unicode碼對應的字元.
如果某段文字中包含大量的特殊符號,FreeMarker提供了另一種特殊格式:可以在指定字串內容的引號前增加r標記,在r標記後的檔案將會直接輸出.看如下程式碼:
${r"${foo}"}
${r"C:\foo\bar"}
輸出結果是:
${foo}
C:\foo\bar
3.1.2. 數值
表示式中的數值直接輸出,不需要引號.小數點使用"."分隔,不能使用分組","符號.FreeMarker目前還不支援科學計數法,所以"1E3"是錯誤的.在FreeMarker表示式中使用數值需要注意以下幾點:
1,數值不能省略小數點前面的0,所以".5"是錯誤的寫法
2,數值8,+8,8.00都是相同的
3.1.3. 布林值
直接使用true和false,不使用引號.
3.1.4. 集合
集合以方括號包括,各集合元素之間以英文逗號","分隔,看如下的例子:
<#list["星期一","星期二","星期三","星期四","星期五","星期六","星期天"]asx>
${x}
</#list>
輸出結果是:
星期一
星期二
星期三
星期四
星期五
星期六
星期天
除此之外,集合元素也可以是表示式,例子如下:
[2+2,[1,2,3,4],"whatnot"]
還可以使用數字範圍定義數字集合,如2..5等同於[2,3,4,5],但是更有效率.注意,使用數字範圍來定義集合時無需使用方括號,數字範圍也支援反遞增的數字範圍,如5..2
3.1.5. Map物件
Map物件使用花括號包括,Map中的key-value對之間以英文冒號":"分隔,多組key-value對之間以英文逗號","分隔.下面是一個例子:
{"語文":78,"數學":80}
Map物件的key和value都是表示式,但是key必須是字串
3.2. 輸出變數值
FreeMarker的表示式輸出變數時,這些變數可以是頂層變數,也可以是Map物件中的變數,還可以是集合中的變數,並可以使用點(.)語法來訪問Java物件的屬性.下面分別討論這些情況
3.2.1. 頂層變數
所謂頂層變數就是直接放在資料模型中的值,例如有如下資料模型:
Maproot=newHashMap();//建立資料模型
root.put("name","annlee");//name是一個頂層變數
對於頂層變數,直接使用${variableName}來輸出變數值,變數名只能是字母,數字,下劃線,$,@和#的組合,且不能以數字開頭號.為了輸出上面的name的值,可以使用如下語法:
${name}
3.2.2. 輸出集合元素
如果需要輸出集合元素,則可以根據集合元素的索引來輸出集合元素,集合元素的索引以方括號指定.假設有索引:
["星期一","星期二","星期三","星期四","星期五","星期六","星期天"].該索引名為week,如果需要輸出星期三,則可以使用如下語法:
${week[2]}//輸出第三個集合元素
此外,FreeMarker還支援返回集合的子集合,如果需要返回集合的子集合,則可以使用如下語法:
week[3..5]//返回week集合的子集合,子集合中的元素是week集合中的第4-6個元素
3.2.3. 輸出Map元素
這裡的Map物件可以是直接HashMap的例項,甚至包括JavaBean例項,對於JavaBean例項而言,我們一樣可以把其當成屬性為key,屬性值為value的Map例項.為了輸出Map元素的值,可以使用點語法或方括號語法.假如有下面的資料模型:
Maproot=newHashMap();
Bookbook=newBook();
Authorauthor=newAuthor();
author.setName("annlee");
author.setAddress("gz");
book.setName("struts2");
book.setAuthor(author);
root.put("info","struts");
root.put("book",book);
為了訪問資料模型中名為struts2的書的作者的名字,可以使用如下語法:
book.author.name//全部使用點語法
book["author"].name
book.author["name"]//混合使用點語法和方括號語法
book["author"]["name"]//全部使用方括號語法
使用點語法時,變數名字有頂層變數一樣的限制,但方括號語法沒有該限制,因為名字可以是任意表達式的結果.
3.2.4. 字串操作
FreeMarker的表示式對字串操作非常靈活,可以將字串常量和變數連線起來,也可以返回字串的子串等.
字串連線有兩種語法:
1,使用${..}或#{..}在字串常量部分插入表示式的值,從而完成字串連線.
2,直接使用連線運算子+來連線字串
例如有如下資料模型:
Maproot=newHashMap();root.put("user","annlee");
下面將user變數和常量連線起來:
${"hello,${user}!"}//使用第一種語法來連線
${"hello,"+user+"!"}//使用+號來連線
上面的輸出字串都是hello,annlee!,可以看出這兩種語法的效果完全一樣.
值得注意的是,${..}只能用於文字部分,不能用於表示式,下面的程式碼是錯誤的:
<#if${isBig}>Wow!</#if>
<#if"${isBig}">Wow!</#if>
應該寫成:
<#ifisBig>Wow!</#if>
擷取子串可以根據字串的索引來進行,擷取子串時如果只指定了一個索引值,則用於取得字串中指定索引所對應的字元;如果指定兩個索引值,則返回兩個索引中間的字串子串.假如有如下資料模型:
Maproot=newHashMap();root.put("book","struts2,freemarker");
可以通過如下語法來擷取子串:
${book[0]}${book[4]}//結果是su
${book[1..4]}//結果是tru
3.2.5. 集合連線運算子
這裡所說的集合運算子是將兩個集合連線成一個新的集合,連線集合的運算子是+,看如下的例子:
<#list["星期一","星期二","星期三"]+["星期四","星期五","星期六","星期天"]asx>
${x}
</#list>
輸出結果是:
星期一星期二星期三星期四星期五星期六星期天
3.2.6. Map連線運算子
Map物件的連線運算子也是將兩個Map物件連線成一個新的Map物件,Map物件的連線運算子是+,如果兩個Map物件具有相同的key,則右邊的值替代左邊的值.看如下的例子:
<#assignscores={"語文":86,"數學":78}+{"數學":87,"Java":93}>
語文成績是${scores.語文}
數學成績是${scores.數學}
Java成績是${scores.Java}
輸出結果是:
語文成績是86
數學成績是87
Java成績是93
3.2.7. 算術運算子
FreeMarker表示式中完全支援算術運算,FreeMarker支援的算術運算子包括:+,-,*,/,%看如下的程式碼:
<#assignx=5>
${x*x-100}
${x/2}
${12%10}
輸出結果是:
-752.52
在表示式中使用算術運算子時要注意以下幾點:
1,運算子兩邊的運算數字必須是數字
2,使用+運算子時,如果一邊是數字,一邊是字串,就會自動將數字轉換為字串再連線,如:${3+"5"},結果是:35
使用內建的int函式可對數值取整,如:
<#assignx=5>
${(x/2)?int}
${1.1?int}
${1.999?int}
${-1.1?int}
${-1.999?int}
結果是:
211-1-1
3.2.8. 比較運算子
表示式中支援的比較運算子有如下幾個:
1,=或者==:判斷兩個值是否相等.
2,!=:判斷兩個值是否不等.
3,>或者gt:判斷左邊值是否大於右邊值
4,>=或者gte:判斷左邊值是否大於等於右邊值
5,<或者lt:判斷左邊值是否小於右邊值
6,<=或者lte:判斷左邊值是否小於等於右邊值
注意:=和!=可以用於字串,數值和日期來比較是否相等,但=和!=兩邊必須是相同型別的值,否則會產生錯誤,而且FreeMarker是精確比較,"x","x","X"是不等的.其它的執行符可以作用於數字和日期,但不能作用於字串,大部分的時候,使用gt等字母運算子代替>會有更好的效果,因為FreeMarker會把>解釋成FTL標籤的結束字元,當然,也可以使用括號來避免這種情況,如:<#if(x>y)>
3.2.9. 邏輯運算子
邏輯運算子有如下幾個:
邏輯與:&&
邏輯或:||
邏輯非:!
邏輯運算子只能作用於布林值,否則將產生錯誤
3.2.10. 內建函式
FreeMarker還提供了一些內建函式來轉換輸出,可以在任何變數後緊跟?,?後緊跟內建函式,就可以通過內建函式來輪換輸出變數.下面是常用的內建的字串函式:
html:對字串進行HTML編碼
cap_first:使字串第一個字母大寫
lower_case:將字串轉換成小寫
upper_case:將字串轉換成大寫
trim:去掉字串前後的空白字元
下面是集合的常用內建函式
定時清除 target height span 保留 ont 菜單欄 工具 史記 瀏覽器是每個使用電腦的人都會用的,瀏覽器的功能就是可以瀏覽任何網頁,每瀏覽一個網頁,瀏覽器都會默認加載下載一些緩存文件,瀏覽的網頁越多,瀏覽器緩存就越多,導致時間久了,瀏覽器的反應就越來越慢 通過 pro pri order 相關配置 points 信息 發現 blank
最全Pycharm教程(1)——定制外觀
最全Pycharm教程(2)——代碼風格
最全Pycharm教程(3)——代碼的調試、執行
最全Pycharm教程(4)— ans 指針 ext election ger rda 宏定義 中源 全選
1、為什麽使用宏
增加你須要反復某種操作非常多次。比如選中源代碼並將其發送到控制臺端調試,我們能不能將著一系列操作簡化為一步,甚至用一組快捷鍵來取代呢?
2、準備工作
( pes eas 觀察 project 項目 python pre 啟動 image
最全Pycharm教程(1)——定制外觀
最全Pycharm教程(2)——代碼風格
最全Pycharm教程(3)——代碼的調試、執行
技術分享 tail link isp 嘗試 多重 image pop 教程
1、準備一個工程
向你的工程中添加一個Python文件,並輸入一些源碼,例如:
2、轉到對應文件、類、符號
Pycharm提供的一個很強力的功能就是能夠根據名稱跳轉到任何文件、類、符 val decorator itertools 異常 最全的 運行時 factory tor rfi
本篇文章重點介紹以下內容
Python語言的一些高階用法主要有以下幾個特性:
generators生成器用法
collections包常見用法
itertoo 解決 代碼管理 右擊 gravity mark ML 頁面 就是 工作 以下博文引用《https://blog.csdn.net/u013067756/article/details/73302758》,再此僅供學習和參考。
Svn是什麽?
SVN(全稱Sub
最全Pycharm教程(1)——定製外觀
原文:https://blog.csdn.net/u013088062/article/details/50100121
最全Pycharm教程(2)——程式碼風格
原文:https://blog.csdn.net/u013088062/arti
全網最全資料總連結:
halcon是德國公司開發的一套很完善的機器視覺演算法包,很廣泛地應用於工業各個領域中,用途十分廣泛,是一款值得學習的影象處理軟體,個人覺得:halcon雖然沒有opencv和matlab在影象處理領域應用更加廣泛,專業性、整合封裝性、穩
構建APP並執行用例
構建APP 編譯
debug模式
detox build --configuration ios.sim.debug
release模式
detox build --configuration ios.sim.release
5.2 執
史上最全PS教程+素材。(192G乾貨)
內含各類PS教程(PS基礎教程,淘寶美工教程,人像教程等)
內含各個版本PS安裝包和破解包(CC2017.CS6.CS5等)
內含字型庫合集(上萬箇中文字型,上萬個英文字型)
內含相簿模版(孕婦模版,兒童寫真模版,男女證件模版等)
內
前言
作業系統:CentOS6.9 64位
Solr版本:Solr7.4.0
Tomcat版本:apache-tomcat-8.5.4
之前一直用Solr6,其實Solr7部署下來和Solr6是一樣的。
部署
第一步:下載安裝包
下載Solr7.4.0:
w
1、主題
在開發專案的過程中經常需要建立任務列表,對於一些小任務,在程式碼中插入便籤註釋會有奇效。
這種註釋的格式如下:
2、建立便籤註釋
非常簡單:
首先,將游標定位到相應行。
然後,建立一行註釋(Ctrl+Slash)。
1、準備工作
(1)確認安裝了Python直譯器,版本2.4到3.4均可。
2、初始化安裝
第一次安裝Pycharm時,安裝程式會諮詢你幾個重要問題:
(1)是否已經預先儲存了設定資訊(例如早期版本的配置資訊)
(2)許可證資訊
1、準備一個工程
向你的工程中新增一個Python檔案,並輸入一些原始碼,例如:
2、轉到對應檔案、類、符號
Pycharm提供的一個很強力的功能就是能夠根據名稱跳轉到任何檔案、類、符號所在定義位置。
3、跳轉到檔案
按下Ctrl+S
如果覺得這篇文章對您有所啟發,歡迎關注我的公眾號,我會盡可能積極和大家交流,謝謝。 1、準備工作 (1)Pycharm版本為3.4或者更高。 (2)電腦上至少已經安裝了一個Python直譯器。 (3)如果你希望配置一個遠端直譯器,則需要伺服器的相關支援。 2、本地
1、主題
介紹如何在Pycharm中使用Vagrant
2、準備工作
確認電腦上安裝了Vagrant和Oracle VirtualBox。
3、下載安裝Vagrant
4、下載安裝Oracle VirtualBox
5、設定環境
如果覺得這篇文章對您有所啟發,歡迎關注我的公眾號,我會盡可能積極和大家交流,謝謝。 1、主題 這篇教程將逐步介紹如何通過Pycharm將你的程式碼部署在遠端伺服器上。 2、準備工作 (1)Pycharm版本為3.0或者更高 (2)擁有待部署遠端伺服器的訪問許可權
如果覺得這篇文章對您有所啟發,歡迎關注我的公眾號,我會盡可能積極和大家交流,謝謝。 1、準備工作 (1)Pycharm版本為3.0或者更高版本 (2)至少安裝了一個Python直譯器並且已經正確配置 (3)已經建立了一個Python工程 2、主要內容 介紹如何通
如果覺得這篇文章對您有所啟發,歡迎關注我的公眾號,我會盡可能積極和大家交流,謝謝。 1、主題 在編寫程式碼的過程中,大部分時間都花在了編輯框的互動中。為了能夠更高效的使用這個工具,我們將對其一下特點進行分節介紹: 2、準備工作 (1)Pycharm版本為2.7或者更 相關推薦
瀏覽器緩存清理最全圖文教程
最全Pycharm教程(10)——Pycharm調試器總篇
最全Pycharm教程(24)——Pycharm編輯器功能之宏定義
最全Pycharm教程(11)——Pycharm調試器之斷點篇
最全Pycharm教程(26)——Pycharm搜索導航之文件名、符號名搜索(轉)
Python的高級特效是什麽?有什麽用呢?史上最全的教程!
史上最全SVN 教程
最全PyCharm教程(1-15)【轉】
halcon教程從0基礎到精通 快速瞭解操作並精通視覺專案最全視訊教程資料彙總 halcon下載
從零開始搭建Detox自動化測試框架測試React Native (IOS/Andriod)也許是全網最全的教程 持續更新中
192G最全PS教程+素材+外掛+推薦收藏
CentOS下Solr7.4.0安裝部署到Tomcat最全詳細教程
最全Pycharm教程(41)——Pycharm擴充套件功能之便籤註釋
最全Pycharm教程(29)——再探IDE,速成手冊
最全Pycharm教程(26)——Pycharm搜尋導航之檔名、符號名搜尋
最全Pycharm教程(4)——有關Python直譯器的相關配置
最全Pycharm教程(35)——Pycharm中使用Vagrant
最全Pycharm教程(13)——Pycharm部署
最全Pycharm教程(10)——Pycharm偵錯程式總篇
最全Pycharm教程(14)——Pycharm編輯器功能總篇