## 前言
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