Freemarker的基本语法及入门基础
freemarker的基本語法及入門基礎
一、freemarker模板文件(*.ftl)的基本組成部分
??????? 1. 文本:直接輸出的內容部分
?? ??? ?2. 注釋:不會輸出的內容,格式為<#--? 注釋內容? -->
?? ??? ?3. 取值(插值):代替輸出數據模型的部分,格式為${數據模型}或#{數據模型}
?? ??? ?4. ftl指令:Freemarker指令,類似于HTML標記。
?? ??? ????????????????????? 內建指令:開始標簽:<#directivename parameter>?????? 結束標簽:</#directivename>????? 空標簽:<#directivename parameter/>? ?
?? ??? ??? ??? ??? ??? ??? ? 自定義指令:開始標簽:<@directivename parameter>?????? 結束標簽:</@directivename>????? 空標簽:<@directivename parameter/>?
?? ??? ??? ??? ??? ??? ??? ? 至于什么是內建指令,什么是自定義指令?? 我會在下面敘述到。
二、Freemarker語法及使用方法
??????? 1. 取值(插值)指令及適用類型:
?? ??? ???????? (1) ${var}
?? ??? ??? ??? ???????? 適用類型:java中常用的八大基本類型以及我們的String引用類型,但是,freemarker中boolean類型顯示時true==yes? false==no
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ???????? 在后臺文件中定義變量
?? ??? ??? ??? ??? ??? ??? ??? ???????? String strVar = "世界你好";
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?int intVar = 10;
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?boolean booVar = true;
?? ??? ??? ??? ??? ??? ??? ??? ?在頁面中獲取變量:
?? ??? ??? ??? ??? ??? ??? ??? ???????? String獲取:<font color="red"> ${strVar} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?int獲取:<font color="red"> ${intVar} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?boolean獲取:<font color="red"> ${booVar?string("yes","no")} </font>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? String獲取:世界你好
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?int獲取:10
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?boolean獲取:yes
?? ??? ??? ??? ?(2)${var!}?
?? ??? ??? ??? ???????? 適用類型:對 null 或者不存在的對象進行取值,可以設置默認值,例:${var!'我是默認值'}??? 即,有值時顯示正常值,無值時顯示默認值
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ???????? 在后臺文件中定義變量
?? ??? ??? ??? ??? ??? ??? ??? ???????? String strVar = "世界你好";
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?String str = null;
?? ??? ??? ??? ??? ??? ??? ??? ?在頁面中獲取變量:
?? ??? ??? ??? ??? ??? ??? ??? ???????? String獲取:<font color="red"> ${strVar!"我是空"} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?str獲取:<font color="red"> ${str!} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?str獲取:<font color="red"> ${str!"默認"} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? String獲取:世界你好
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?str獲取:
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?str獲取:默認
?? ??? ??? ??? ?(3)${封裝對象.屬性}
?? ??? ??? ??? ???????? 適用類型:對封裝對象進行取值,例:${User.name}
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ???????? 在后臺文件中封裝對象User[ name,? age ]
?? ??? ??? ??? ??? ??? ??? ??? ???????? String name = "姓名";
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?int age = 18;
?? ??? ??? ??? ??? ??? ??? ??? ?在頁面中獲取變量:
?? ??? ??? ??? ??? ??? ??? ??? ???????? name獲取:<font color="red"> ${User.name} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?age獲取:<font color="red"> ${User.age} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? name獲取:姓名
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?age獲取:18
?? ??? ??? ??? ?(4)${date?String('yyyy-MM-dd')}
?? ??? ??? ??? ???????? 適用類型:對日期格式進行取值,在這里我要強調的是,定義Date類型的變量時,java.util.Date無法輸出日期,須使用java.sql.Date
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ???????? 在后臺文件中定義變量
?? ??? ??? ??? ??? ??? ??? ??? ???????? java.sql.Date date = new Date().getTime();
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?java.sql.Date time = new Date().getTime();
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?java.sql.Date datetime = new Date().getTime();
?? ??? ??? ??? ??? ??? ??? ??? ?在頁面中獲取變量:
?? ??? ??? ??? ??? ??? ??? ??? ???????? date獲取:<font color="red"> ${date?string('yyyy-MM-dd')} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?time獲取:<font color="red"> ${date?string('HH:mm:ss')} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?datetime獲取:<font color="red"> ${date?string('yyyy-MM-dd HH:mm:ss')} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? name獲取:姓名
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?age獲取:18
?? ??? ??? ??? ?(5)${var?html}
?? ??? ??? ??? ???????? 適用類型:轉義HTML內容
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ???????? 在后臺文件中封裝變量Menu[ name, model ]
?? ??? ??? ??? ??? ??? ??? ??? ???????? Menu m = new Menu();?
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?m.setName(" freemarker ");
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?m.setModel("<font color = 'red'>我只是個菜單</font>");
?? ??? ??? ??? ??? ??? ??? ??? ?在頁面中獲取變量:
?? ??? ??? ??? ??? ??? ??? ??? ???????? 非轉義獲取:<font color="red"> ${m.model} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?轉義獲取: ${m.model?html} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? 非轉義獲取:我只是個菜單
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?轉義獲取:<font color = 'red'>我只是個菜單</font>
?? ??? ??? ??? ?(6)<#assign num = 100 />
?? ??? ??? ??? ???????? 適用類型:定義變量,支持計算和賦值
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ??? ??? ?在頁面中定義變量:
?? ??? ??? ??? ??? ??? ??? ??? ???????? <#assign num = 100 />
?? ??? ??? ??? ??? ??? ??? ??? ???????? num獲取:<font color="red"> ${num)} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?計算結果:<font color="red"> ${num * 10} </font><br>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? num獲取:100
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?計算結果:1000
?? ??? ??? ??? ?(7)對List集合進行取值
?? ??? ??? ??? ???????? <#list? list集合? as? item>?
?????????????????????????????? ${item}??? --取值
??????????????????????? </#list>
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ???????? 在后臺文件中定義變量
?? ??? ??? ??? ??? ??? ??? ??? ???????? List<String> strList = new ArrayList<String>();
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?strList.add("第一個值");
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?strList.add("第二個值");
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?strList.add("第三個值");
?? ??? ??? ??? ??? ??? ??? ??? ?在頁面中獲取變量:
?? ??? ??? ??? ??? ??? ??? ??? ???????? <#list? strList? as? item>?
?????????????????????????????????????????????? ${item!}<br/>??? --取值
??????????????????????????????????????? </#list>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? 第一個值
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?第二個值
??????????????????????????????????????? 第三個值
?? ??? ??? ??? ?(8)對Map集合進行取值
?? ??? ??? ??? ???????? <#list map?keys as key>
?? ??? ??? ??????????????????? ${key}:${map[key]}
?? ??? ??? ??? ???????? </#list>
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ???????? 在后臺文件中定義變量
?? ??? ??? ??? ??? ??? ??? ??? ???????? Map<String, Object> m = new HashMap<String, Object>();
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?m.put("name","姓名");
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?m.put("age",18);
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?m.put("sex","男");
?? ??? ??? ??? ??? ??? ??? ??? ?在頁面中獲取變量:
?? ??? ??? ??? ??? ??? ??? ??? ????????? <#list m?keys as key>
?? ??? ??? ???????????????????????????????????? ${key}:${m[key]}
?? ??? ??? ??? ????????????????????????? </#list>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? name:姓名
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?age:18
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?sex:男
?? ??? ?2. 條件判斷指令:
?? ??? ???????? (1) if?
?? ??? ??? ??? ???????? 格式:<#if 條件>
?? ??? ??? ???????????????????????????? 輸出
?? ??? ??? ????????????????????????? </#if>
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ??? ??? ?在頁面中定義變量并判斷條件:
?? ??? ??? ??? ??? ??? ??? ??? ???????? <#assign age = 18 /><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?<#if age == 18>
?? ??? ??? ???????????????????????????????????? <font color="red"> age = 18</font>
?? ??? ??? ???????????????????????????? </#if>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? age = 18
?? ??? ??? ??? ?(2) if - else?
?? ??? ??? ??? ???????? 格式:<#if 條件>
??????????????????????????????????????? 輸出
?? ??? ??? ???????????????????????? <#else>
?? ??? ??? ??? ??? ??? ???????????????? 輸出
?? ??? ??? ???????????????????????? </#if>
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ???????? 在頁面中定義變量并判斷條件:
?? ??? ??? ??? ??? ??? ??? ??? ???????? <#assign age = 20 /><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?<#if age == 18>
?? ??? ??? ???????????????????????????????????? <font color="red"> age = 18</font>
?? ??? ??? ??? ??? ??? ??? ??? ??? ???? <#else>
?? ??? ??? ??? ??? ??? ???????????????????????? <font color="red"> age != 18</font>
?? ??? ??? ???????????????????????????? </#if>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? age != 18
?? ??? ??? ??? ?(3) if - elseif - else
?? ??? ??? ??? ???????? 格式:<#if 條件1>
??????????????????????????????????????? 輸出
?? ??? ??? ???????????????????????? <#elseif 條件2>
?? ??? ??? ??? ??? ??? ???????????????? 輸出
?? ??? ??? ???????????????????????? <#else>
?? ??? ??? ???????????????????????????? 輸出
?? ??? ??? ???????????????????????? </#if>
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ???????? 在頁面中定義變量并判斷條件:
?? ??? ??? ??? ??? ??? ??? ??? ???????? <#assign age = 20 /><br>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?<#if age > 18>
?? ??? ??? ???????????????????????????????????? <font color="red">青年</font>
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?<#elseif age == 18>
?? ??? ??? ??? ??? ??? ???????????????????????? <font color="red"> 成年</font>
?? ??? ??? ??? ??? ??? ??? ??? ??? ???? <#else>
?? ??? ??? ??? ??? ??? ???????????????????????? <font color="red"> 少年</font>
?? ??? ??? ???????????????????????????? </#if>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? 成年
?? ??? ??? ??? ?(4) switch? --常與case break default一起使用? 參數可為字符串
?? ??? ??? ??? ???????? 格式:<#switch var>
?? ???????????????????????????????? <#case 條件1>
?? ??? ??? ?????????????????????????????? 輸出
?? ??? ??? ???????????????????????? <#break>
?? ??? ??? ???????????????????????? <#case 條件2>
?? ??? ??? ?????????????????????????????? 輸出
?? ??? ??? ???????????????????????? <#break>
?? ??? ??? ???????????????????????? <#default>
?? ??? ??? ?????????????????????????????? 輸出
?? ???????????????????????????????? </#switch>
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ??? ??? ?在頁面中定義變量并判斷:
?? ??? ??? ??? ??? ??? ??? ??? ??????? <#switch var="星期一">
?? ??????????????????????????????????? <#case "星期一">
?? ??? ??? ??????????????????????????????????? 油燜大蝦
?? ??? ??? ??????????????????????????? <#break>
?? ??? ??? ??????????????????????????? <#case "星期二">
?? ??? ??? ??????????????????????????????????? 炸醬面
?? ??? ??? ??????????????????????????? <#break>
?? ??? ??? ??????????????????????????? <#default>
?? ??? ??? ??????????????????????????????????? 肯德基
?? ??????????????????????????????????? </#switch>
?? ??? ??? ??? ??? ??? ??? ??? ?展示結果:
?? ??? ??? ??? ??? ??? ??? ??? ???????? 油燜大蝦
?? ??? ?3. 自定義函數、自定義指令:
?? ??? ???????? (1) 自定義函數
?? ??? ??? ??? ???????? 實現TemplateMthodModelEx
?? ??? ??? ??? ?(2) 自定義指令
?? ??? ??? ??? ???????? 實現TemplateDirectiveModel
?? ??? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ???????? <@自定義指令名稱 入參(key-value格式) ; 出參(list格式)>
?? ??? ??? ??? ??? ??? ??? ??? ???????? 運行條件
?? ??? ??? ??? ??? ??? ??? ??? ?</@自定義指令名稱>
?? ??? ??? ??? ??? ??? ??? ??? ?PS:不同的返回值用逗號( , )間隔開
?? ??? ?4.常用內建函數、macro(宏指令)、function(函數指令):
?? ??? ???????? (1) 常用內建函數
?? ??? ??? ??? ???????? 處理字符串:?
?? ??? ??? ??? ??? ??? ??? ? substring????????????????????????????????????????? 截取字符串,包頭不包尾(下標)
?? ??? ??? ??? ??? ??? ??? ? cap_first????????????????????????????????????????? 第一個字母大寫?
?? ??? ??? ??? ??? ??? ??? ? end_with?????????????????????????????????????????? 以什么字母結尾?? ?
?? ??? ??? ??? ??? ??? ??? ? contains??????????????????????????????????????????? 是否包含目標字符串
?? ??? ??? ??? ??? ??? ??? ? date? datetime? time?????????????????????? 轉換成日期格式
?? ??? ??? ??? ??? ??? ??? ? starts_with????????????????????????????????????? 以什么字母開頭
?? ??? ??? ??? ??? ??? ??? ? index_of????????????????????????????????????????? 返回某個指定的字符串值在字符串中首次出現的位置(下標)
?? ??? ??? ??? ??? ??? ??? ? last_index_of????????????????????????????????? 獲取指定字符出現的最后位置(下標)
?? ??? ??? ??? ??? ??? ??? ? split????????????????????????????????????????????????? 分隔
?? ??? ??? ??? ??? ??? ??? ? trim????????????????????????????????????????????????? 去兩端空格
?? ??? ??? ???????????? 處理數字:
?? ??? ??? ??? ??? ??? ??? ? string???????????????????????????????????????????? ?
?? ??? ??? ??? ??? ??? ??? ? x?string("0.##")????????????????????????? 變成小數點后幾位
?? ??? ??? ??? ??? ??? ??? ? round????????????????????????????????????????????? 四舍五入
?? ??? ??? ??? ??? ??? ??? ? floor?????????????????????????????????????????????? 去掉小數點
?? ??? ??? ??? ??? ??? ??? ? ceiling???????????????????????????????????????????? 近1?? 變成整數
?? ??? ??? ???????????? 處理list:
?? ??? ??? ??? ??? ??? ??? ?? first:????????????????????????????????????????????? 取List值第一個值
?? ??? ??? ??? ??? ??? ??? ?? last:??????????????????????????????????????????????? 取List值最后一個值
?? ??? ??? ??? ??? ??? ??? ?? seq_contains:??????????????????????????????? 是否包含指定字符
?? ??? ??? ??? ??? ??? ??? ?? seq_index_of:?????????????????????????????? 指定字符所在位置
?? ??? ??? ??? ??? ??? ??? ?? size:??????????????????????????????????????????????? 集合大小
??? ??? ??? ??? ??? ??? ??? ?? reverse:????????????????????????????????????????? 集合倒序排列
?? ??? ??? ??? ??? ??? ??? ?? sort:??????????????????????????????????????????????? 對集合進行排序
?? ??? ??? ??? ??? ??? ??? ?? sort_by:???????????????????????????????????????? 根據某一個屬性排序
?? ??? ??? ??? ??? ??? ??? ?? chunk:??????????????????????????????????????????? 分塊處理
?? ??? ??? ???????????? 其他:
?? ??? ??? ??? ??? ??? ??? ?? is_string:????????????????????????????????????? 是否為字符類型
?? ??? ??? ??? ??? ??? ??? ?? is_number:??????????????????????????????????? 是否為整數類型
?? ??? ??? ??? ??? ??? ??? ?? is_method:?????????????????????????????????? 是否為方法
?? ??? ??? ??? ??? ??? ??? ?? ():????????????????????????????????????????????????? 判斷整個變量
?? ??? ??? ??? ??? ??? ??? ?? has_content:??????????????????????????????? 判斷對象是否為空或不存在
?? ??? ??? ??? ??? ??? ??? ?? eval:?????????????????????????????????????????? 求值
?? ??? ??? ??? ?(2) macro(宏指令)
?? ??? ??? ??? ???????? 調用:<@macro_name param />
?? ??? ??? ??? ??? ??? ?語法:<#macro? 變量名? 參數> ?
?? ??? ??? ??? ??? ??? ???????????????????? <#nested/> ?
?? ??? ??? ??? ??? ??? ??? ??? ??? ?</#macro>
?? ??? ??? ??? ?(3) function(函數指令)
?? ??? ??? ??? ???????? 調用:${function_name(param)}
?? ??? ??? ??? ??? ??? ?語法:<#function? 變量名? 參數> ?
?? ??? ??? ??? ??? ??? ???????????? <#return> ?
?? ??? ??? ??? ??? ??? ??? ??? ??? ?</#function>
總結
以上是生活随笔為你收集整理的Freemarker的基本语法及入门基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu 1698(线段树区间更新)
- 下一篇: 此图片来自微信公众平台未经允许不可引用