FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。
Freemarker是一个基于Java语言的模板引擎,不是web框架,是一个试图层的组件,主要用于解析服务器端的数据,并展示到视图层。
语法:
JAVA中常用的数据模型 :
基本类型数据(比如Integer)
封装的对象类型(比如User对象)
集合类型(List Map)
取值指令 :
常用${var}语法进行取值
对null、不存在对象取值${var!}
取包装对象的值,通过“点”语法:${User.name}
取值的时候进行计算,赋值
Date类型格式${data?String('yyyy-MM-dd')}
如何转义HTML内容:${var?html}
函数:
(一)处理字符串内建函数:
substring 字符串的截取
cap_first 首字母变大写
ends_with 以...结尾的函数
contains 字符串是否包含目标字符串的函数
如何把一个字符串转化为date 、datetime 、time类型的函数 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 list长度
reverse 倒序
sort 升序排序
sort_by 根据属性排序
trunk 把字符串分块处理
(四)其他内建函数
is函数:判断变量的类型
is_string 字符串
is_number 整数
is_method 方法
() 对变量进行判断
hs_content 判断对象是否是空值,是不是有内容
eval 求值函数
更多语法,在这里不再列举
实例代码:
(一)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>freemarker</title>
</head>
<body>
<h1>取值:</h1>
<ul>
<li>整数:<font size="20px" color="red">${intVar}</font></li>
<li>长整数:<font size="20px" color="blue">${LongVar}</font></li>
<li>双精度:<font size="20px" color="pink">${doubleVar}</font></li>
<li>字符串:<font size="20px" color="yellow">${StringVar}</font></li>
<li>布尔值: <font size="20px" color="green">${booleanVar?string('yes','no')}</font></li>
<li>日期类型Java.Util.Date:<font size="20px" color="red">${dateVar1?string('yyyy-MM-dd
HH:mm:ss')}</font></li>
<li>空值:<font size="20px" color="pink">${nullVar1!}</font></li>
<li>空值:<font size="20px" color="green">${nullVar!'我是默认值'}</font></li>
<li>不存在的变量:<font size="20px" color="blue">${变量!'我是默认变量'}</font></li>
<li>不存在的变量1:<font size="20px" color="red">${free!'我是默认变量'}</font></li>
</ul>
<hr size="10" color="blue">
<ul>
<li>赋值&运算</li>
<#assign a=100 />
a =
<font color="red">${a}</font>
<br /> a+100=
<font coloe="blue">${a+100}</font>
<br />
</ul>
</body>
</html>
(二)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>freemarker</title>
<style type="text/css">
body {
font-weight: bold;
}
</style>
</head>
<body>
<h1>freemarker实现遍历list集合</h1>
<ul>
<li>集合list</li>
<#list myList as item> <font color="blue" size="20px">${item}</font>
<br />
</#list>
</ul>
<hr size="10" color="blue">
<h1>if表达式</h1>
<ul>
<li>if</li>
<#assign var=99 />
<#if var==99> <font color="red">var=99</font> </#if>
<br />
<#if var==99> <font color="red">var=99</font> <#else> <font
coloe="green">var!=99</font></#if>
<br />
<#ifvar> 99> <!-- > 大于 --> <font color="red">var大于99</font>
<#elseif var==99> <font coloe="green">var=99</font> <#else>
<font coloe="blue">var小于99</font> </#if> <br />
<li>if多条件 ||,&&,!</li>
<#assign var='python'> <#if var== 'python' || var=='Java'>
<font color="red">python or java</font>
<br />
</#if> <#if var== 'python' && var?length==6>
<font color="yellow">python length 6</font><br/>
</#if> <#if (var==
'python' && var?length== 6) || (var== 'java')> <font
color="black">python length 6或者Java</font>
<br />
<br />
</#if> <#if !((var== 'python' && var?length== 6) || (var== 'java'))> <font
color="black">python length 6或者Java</font>
<br />
<br />
</#if>
</ul>
</body>
</html>
(三)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>freemarker</title>
<style type="text/css">
body{
font-weight:bold;
}
</style>
</head>
<body>
<h1>freemarker遍历map集合</h1>
<ul>
<li>集合map</li>
<#list map?keys as key>
<font color="green" size="20px">${key}:${map[key]}</font><br/>
</#list>
</ul>
<hr size="10" color="red">
<h3>switch语句</h3>
<ul>
<li>switch,case,break,default</li>
<#assign var = 8/>
<#switch var>
<#case 1>星期一 <#break>
<#case 2>星期二 <#break>
<#case 3>星期三 <#break>
<#case 4>星期四 <#break>
<#case 5>星期五 <#break>
<#case 6>星期六 <#break>
<#case 7>星期日 <#break>
<#default>无效的星期
</#switch>
</ul>
<hr size="10" color="blue">
<ul>
<li>switch,case,break,default</li>
<#assign var = 'java'/>
<#switch var>
<#case 'java'>我是java <#break>
<#case 'python'>我是python <#break>
<#case 'C'>我是C语言 <#break>
<#default>我是谁?谁是我?
</#switch>
</ul>
</body>
</html>
(四)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>freemarker内建函数</title>
</head>
<body>
<h1>内建函数</h1>
<ul>
<h2>1,字符串内建函数</h2>
<#list "a|b|c|d"?split("|") as item>
<li>${item}</li>
</#list>
</ul>
<hr size="10" color="red">
<h1>字符串转日期</h1>
<ul>
<#assign var1="23/02/2017" ?date("MM/dd/yyyy")/>
<#assign var2="11:34:33" ?time("HH:mm:ss")/>
<#assign var3="2017-02-23 11:35 PM" ?datetime("yyyy-MM-dd hh:mm")/>
<li>${var1}</li>
<li>${var2}</li>
<li>${var3}</li>
</ul>
<hr size="10" color="blue">
<h1>数字类型的内建函数</h1>
<ul>
<#assign numVar1=314.5662789 />
<li>格式化:${numVar1?string("0.##")}</li>
<li>四舍五入:${numVar1?round}</li>
<li>去掉小数点:${numVar1?floor}</li>
<li>进1:${numVar1?ceiling}</li>
</ul>
<hr size="10" color="black">
<h1>list内建函数</h1>
<ul>
<#assign listVar1=[1,2,3,4,11,12,13,14,21,22,23,24] />
<li>分块处理取长度:${listVar1?chunk(4)?size}</li>
<li>长度:${listVar1?size}</li>
<#list listVar1?chunk(4)?last as item>
<li>${item}</li>
</#list>
<li>取list第一个值:${listVar1?first}</li>
<li>取list最后一个值:${listVar1?last}</li>
</ul>
<hr size="10" color="green">
<h1>其他内建函数</h1>
<ul>
<#assign sVar = 'helloworld'/>
<li>${sVar?is_number?string('yes','no')}</li>
<li>${sVar?has_content?string('yes','no')}</li>
<li>${"1"+"2"?eval}</li>
<li>${(1+2)?eval}</li>
<li>${"1"+"2"?is_string?string('yes','no')}</li>
<li>${("1"+"2")?is_string?string('yes','no')}</li>
</ul>
</body>
</html>
(五)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>macro,nested,return:实战demo</h1>
<h2>1.macro:宏指令</h2>
<ul>
<li>FreeMarker:无参数的macro</li>
<div>
<#macro test>
<font color="red" size="18px">我是无参数的macro</font>
</#macro>
<@test/>
</div>
<li>Freemarker2:有参数的macro</li>
<div>
<#macro test param1 param2>
<font color="blue" size="18px">我是有参数的macro,paeam1=${param1},param2=${param2}</font>
<br/>
</#macro>
<@test param1="java" param2="python"/>
</div>
<li>Freemarker3:有参数的macro</li>
<div>
<#macro test param1 param2="JavaScript">
<font color="blue" size="18px">我是有参数的macro,paeam1=${param1},param2=${param2}</font>
<br/>
</#macro>
<@test param1="java" param2="hello python"/>
</div>
<li>Freemarker4:有多个参数的macro</li>
<div>
<#macro test param1 param2="python" paramExt...>
<font color="green" size="18px">我是有参数的macro,paeam1=${param1},param2=${param2}</font>
<br/>
<font color="blue" size="18px">${paramExt['param3']}</font>
<font color="blue" size="18px">${paramExt['param4']}</font>
</#macro>
<@test param1="java" param2="python" param3="nodejs" param4="html"/>
</div>
</ul>
<hr size="10" color="red">
<h2>2,nested</h2>
<div>
<ul>
<#macro test param1="java">
${param1}<br/>
<#nested param1,"我的nested参数"><br/>
</#macro>
<li>调用</li>
<div>
<@test param1="java";loopVar1,loopVar2>
<font color="green" size="18px">hello ${loopVar1},${loopVar2}</font><br/>
</@test>
<@test param1="python"; loopVar1>
hello ${loopVar1}<br/>
</@test>
</div>
</ul>
<hr size="10" color="pink">
<div>
<h2>3,函数</h2>
<ul>
<#function doAdd param1 param2>
<#return param1+param2>
</#function>
<li>调用</li>
<div>你好,我是调用${doAdd(100,100)}</div>
</ul>
</div>
</div>
</body>
</html>
更多代码在这里不再一一列举,感兴趣的朋友可以到我的github上下载源码。此代码基于SpringBoot实现,后台还有众多Java代码。感谢各位的支持!
源代码地址:
https://github.com/JavaCodeMood/freemarker
热门评论
3Q
支持下碉堡了!!!!!
不知道说什么 厉害了