[Freemark]freemark常用語法

FreeMarker是一款模板引擎: 即一種基於模板和要改變的數據,並用來生成輸出文本(HTML網頁、電子郵件、配置文件、源代碼等)的通用工具。它不是面向最終用戶的,
而是一個Java類庫,是一款程序員可以嵌入他們所開發產品的組件。

FreeMarker模板的編寫語言爲FreeMarker Template Language(FTL),屬於簡單、專用的語言。需要準備數據在真實編程語言中來顯示,比如數據庫查詢和業務運算,之後模板顯示已經準備好的數據。在模板中,主要用於如何展現數據,而在模板之外注意於要展示什麼數據。

注意:freemarker中顯示某對象使用${name}, freeMarker控制較嚴格,對於null,或者miss value,freemarker會報錯

1. 需要判斷對象是否爲空;

2. 也可以通過設置默認值來避免對象爲空的錯誤。

判斷爲空具體方法:

!:default value operator,語法結構爲:unsafe_expr!default_expr,

     ${name!''}如果name爲空,就以默認值(“!”後的字符)顯示。

   對象user,name爲user的屬性的情況,user,name都有可能爲空,可以寫成${(user.name)!''},

     表示user或者name爲null,都顯示爲空。

??: Missing value test operator ,測試是否爲missing value

     product.color??將只測試color是否爲null

     (product.color)??將測試product和color是否存在null

?exists:舊版本的用法


常用語法:

<#--   --> freemark的註釋

前提:將數據封裝到map中,每個元素可以是個對象,有屬性,有關聯的對象

properties 爲準備好的Map對象集合,

${ package } packge爲變量,爲map的key,${}後可以直接顯示內容;
${.now} 當前時間


className=dept
${ className?cap_first }   首字母大寫
${ className?uncap_first } 首字母小寫
全小寫
<#if (list.title?length>15)> 字符串長度
${ package?replace(".","/") } 替換

== html
html 用於將字符串中的<、>、&和“替換爲對應得&lt;&gt;&quot:&amp


== 特殊字符替換
$ ${'$'}
# ${'#'}


== FreeMarker不會自動進行類型的轉換
 
常見的轉換:
 
String -->  int            ?eval
int       -->  String      ?c

freemarker中的c函數是將數字轉換成字符串,當你在頁面中要顯示帶小數的數字時,一定要寫成${x?c}而不能寫成${x?default('')},否則顯示出的數字都變成了整數,小數位都被自動截掉了。切記!!!

== 遍歷集合
<#list properties as pro>  
private  ${pro.proType} ${pro.proName};<#if pro.proComment != "">//${pro.proComment}</#if>
</#list>


== 定義變量,顯示變量
<#assign x=pro.proName?index_of("createBy")>
${x}

布爾類型轉換爲字符串顯示
<#assign x=pro.primary?string('yes', 'no')>
${x}


Boolean類型不能使用isXxx,需要使用getXxx,因爲Freemarker使用java會對isXxx映射返回boolean基本型,但是freemarker不支持基本類型boolean,會拋異常。
freemarker中輸出時可以使用這種方式輸出${xxx?string("true","flase")}當xxx爲true時顯示字符串true,否則爲字符串false,當然true,false字符串也可以換成其他字符串,比如yes和no。

==布爾判斷
<#if pro.primary>
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
</#if>
<#if pro.primary?string('yes', 'no')=="no">
<#if "createBy,createDept,createTime,updateBy,updateTime"?index_of(pro.proName) == -1>
public ${pro.proType} get${pro.proName?cap_first}() {
return this.${pro.proName};
}
public void set${pro.proName?cap_first}(${pro.proType} ${pro.proName}) {
this.${pro.proName} = ${pro.proName};
}
</#if>
</#if>


==判斷空串
<#if pro.proComment != "">//${pro.proComment}</#if>

1. 判斷對象是否存在(null)
例如判斷 target 是否爲null,如果不爲 nll 則做xxx動作
<#if target??>
    xxxx
</#if>
 (目標變量後面連續兩個??)
 
2. 字符串或數字比較
 java裏標準字符串比較需要 .equals() 方法,在freemarkder中進行了簡化,字符串的比較方法和數字做到完全一樣
 <#if str == "success">
    xxx
</#if>
<#if str !== "error">
    xxx
</#if>

==判斷是否包含子串:
pro.proName爲子串
<#if "CreateBy,CreateDept,CreateTime"?index_of(pro.proName)==-1>

== 高級應用:宏        --常用場景:實現每個文件引入版本

example:

在CopyRight.ftl中定義:

<#macro CopyRight> 

/**
 * @Description: ${ className }Service接口
 * @Author: 米米米
 * @Company: http://java.cn
 * @CreateDate: ${.now}
 */
 </#macro>

調用:
<#import "CopyRight.ftl" as my>
<@my.CopyRight/>

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