## 前言
FreeMarker 是一款模板引擎:即一種基于模板、用來生成輸出文本(任何來自于 HTML格式的文本用來自動生成源代碼)的通用工具。
FreeMarker 實際上是被設計用來生成 HTML 頁面,尤其是通過實現了基于 MVC(Model View Controller, 模型-視圖-控制器)模式的 Java Servlet 應用程序。
## freemarker的常用指令
模板+數據模型(java)=輸出
* 插值
${variableName}
${obj.attr}
* 邏輯運算符,邏輯運算符只能用于布爾值。
&&:邏輯與;||:邏輯或; !:邏輯非
* 內建函數
FreeMarker提供了一些內建函數來轉換輸出,可以在任何變量后緊跟?,?后緊跟內建函數,就可以通過內建函數來轉換輸出變量。
1. **字符串相關常用的內建函數**
html:對字符串進行HTML編碼;
cap_first:使字符串第一個字母大寫;
lower_case:將字符串轉成小寫;
upper_case:將字符串轉成大寫;
2. **集合相關常用的內建函數**<br>
size:獲得集合中元素的個數;
3. **數字值相關常用的內建函數**<br>
int:取得數字的整數部分。
## 模板開發語句
* if使用指令(常用必會)
~~~
<#if x == 1>
x is 1
</#if>
//else if ; else 用法
<#assign age=23>
<#if (age>60)>老年人
<#elseif (age>40)>中年人
<#elseif (age>20)>青年人
<#else> 少年人
</#if>
~~~
* switch使用指令(常用必會)
~~~
<#switch x>
<#case 1>
1
<#break>
<#case 2>
2
<#break>
<#default>
0
<#break>
</#switch>
~~~
* list循環格式(常用必會)
~~~
<#list students as s>
<tr>
<td>${s.no}</td>
<td>${s.name}</td>
<td>${s.sex}</td>
</tr>
</#list>
~~~
* assign指令使用示例,定義模板變量,可以使用模板變量(常用必會)
~~~
<#-- 直接定義 -->
<#assign x="Hello ${user}!">
<#-- 定義 -->
<#assign x>
<#list ["星期一", "星期二", "星期三", "星期四", "星期五"] as n>
${n}
</#list>
</#assign>
${x}
~~~
* 集合以及對象都可以做疊加(常用必會)
~~~
<#list ["星期一","星期二","星期三"] + ["星期四","星期五"] as x>
${x}
</#list>
<#assign scores = {"語文":86,"數學":78} + {"數學":87,"Java":93}>
~~~
* import指令 (常用必會)
該指令用于導入FreeMarker模板中的所有變量,并將該變量放置在指定的Map對象中,import指令的語法格式如下: `<#import "/lib/common.ftl" as com> `
上面的代碼將導入`/lib/common.ftl`模板文件中的所有變量,交將這些變量放置在一個名為`com`的Map對象中.
* include語法(常用必會)
可以包含頁面:`<#include filename [options]> `,在上面的語法格式中,兩個參數的解釋如下:
1.filename:該參數指定被包含的模板文件 ;
2.options:該參數可以省略,指定包含時的選項,包含encoding和parse兩個選項,其中encoding指定包含頁面時所用的解碼集,而parse指定被包含文件是否作為FTL文件來解析,如果省略了parse選項值,則該選項默認是true.
* noparse指令
noparse指令指定FreeMarker不處理該指定里包含的內容,該指令的語法格式如下:
~~~
<#noparse>
<#list books as book>
<tr><td>${book.name}<td>作者:${book.author}
</#list>
</#noparse>
輸出如下:
<#list books as book>
<tr><td>${book.name}<td>作者:${book.author}
</#list>
~~~
* escape , noescape指令
escape指令導致body區的插值都會被自動加上escape表達式,但不會影響字符串內的插值,只會影響到body內出現的插值,使用escape指令的語法格式如下:
~~~
<#escape identifier as expression>...
<#noescape>...</#noescape>
</#escape>
//看如下的代碼:
<#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}
~~~
* setting指令
該指令用于設置FreeMarker的運行環境,該指令的語法格式如下:`<#setting name=value>`,在這個格式中,name的取值范圍包含如下幾個:
locale:該選項指定該模板所用的國家/語言選項
number_format:指定格式化輸出數字的格式
boolean_format:指定兩個布爾值的語法格式,默認值是true,false
date_format,time_format,datetime_format:指定格式化輸出日期的格式
time_zone:設置格式化輸出日期時所使用的時區
*
* 注釋部分
` <#-- 注釋部分 -->`
- 前端入門
- 前端入職須知
- 前端自我定位
- pc與手機頁面差別
- 前端書單
- 前端種子計劃
- 前端技術棧
- ps
- ps入門階段
- html
- html入門
- html代碼規范
- meta
- table
- iframe
- a標簽詳解
- image
- html代碼審查工具
- h5專題
- h5入門
- h5新增屬性
- canvas畫布教程
- audio/video
- Geolocation
- Websockets
- Web storage
- Communication
- Web Workers
- requestAnimationFrame
- css
- css入門必學
- css代碼規范
- 項目字體規范
- css基本位置布局
- css常見樣式命名規則
- css代碼優化建議
- css常用樣式名
- css選擇器攻略
- css盒子模型的理解
- css屬性繼承與默認值
- css代碼審查工具
- css中常見的知識盲區
- css3新特性淺談
- css新特性了解
- border-radius
- background
- transform
- animation
- white-space
- css常用技術
- 文本兩端對齊
- css之浮動解決方案
- css優化建議
- 文本超出省略
- img-sprites
- rem布局教程
- 水平居中&垂直居中
- 固寬&變寬布局
- 寬高固定比例的盒模型
- 樣式預處理語言
- less教程
- sass教程
- postcss教程
- js
- javascript入門
- js代碼規范
- js基礎拓展
- js代碼審查工具
- js性能優化
- js基本語句
- 基本運算
- 基本語句語法
- js對象
- es6入門
- obj
- Array
- Date
- String
- Boolean
- Number
- Json
- RegExp
- Math
- function
- jquery入門
- jq核心思想
- jq基本語法
- jq插件庫匯總
- js常用技術
- break&continue區別
- js對日期轉換
- js控制運動-move.js
- 原生js-cookie語法
- ajax請求后回調
- 表單數據序列化
- zepto
- zepto入門
- 百度touchjs
- js編程
- 插件庫
- 功能性插件
- pdfjs
- wdatepicker
- qrcoder
- barcode插件
- photoviewer
- hammer.js
- echarts
- 交互組件
- layerjs
- java
- java入門
- java基本語句
- springMVC
- javaweb
- vm模板引擎
- freemarker
- maven教程
- mySql教程
- flex教程
- flex入門
- git教程
- git入門
- git分支
- git-tag管理
- git注意事項
- git-torise入門
- ide-git插件使用
- web
- web兼容
- web兼容思想
- pc端兼容適配文檔
- pc端兼容bug匯總
- ie兼容bug匯總
- 手機兼容bug匯總
- web安全
- jeecms
- web存儲
- app/h5組件
- 安卓教程
- ios教程
- 前端教程
- rubikx的教程
- 其他
- artTemplate
- tmod使用
- 跨域問題
- markdown教程
- 常用工具
- postman-api調試
- web常識
- 瀏覽器ua統計
- ui框架
- easyui
- bootstrap
- 入門推薦
- weui
- sui-pc
- sui-mobile
- layerUi