Freemarker介绍及基础语法
什么是 FreeMarker?
FreeMarker 是一款 模板引擎:
即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。
它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker特性
通用目标
能够生成各种文本:HTML、XML、RTF、Java源代码等等
易于嵌入到你的产品中:轻量级;不需要Servlet环境
插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等
你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器
强大的模板语言
所有常用的指令:include、if/elseif/else、循环结构
在模板中创建和改变变量
几乎在任何地方都可以使用复杂表达式来指定值
命名的宏,可以具有位置参数和嵌套内容
名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突
输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换
通用数据模型
FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示
你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰
为Web准备
在模板语言中内建处理典型Web相关任务(如HTML转义)的结构
能够集成到Model2 Web应用框架中作为JSP的替代
支持JSP标记库
为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员
智能的国际化和本地化
字符集智能化(内部使用UNICODE)
数字格式本地化敏感
日期和时间格式本地化敏感
非US字符集可以用作标识(如变量名)
多种不同语言的相同模板
强大的XML处理能力
<#recurse> 和<#visit>指令(2.3版本)用于递归遍历XML树
在模板中清楚和直觉的访问XML对象模型
Freemarker的使用方法
把freemarker的jar包添加到工程中。
Maven工程添加依赖
<!--freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
Freemarker 语法总结
1、list的大小判断
<#if (list?size>0)>
</#if>
2、布尔判断
<#if bb == true>
</#if>
3、list 里面的index ${item_index}
4、list<map<string,list>>
<#list list as map>
<#list map?keys as key>
<#if key== "货物">
<#list map[key] as item>
<tr>
<td style="text-align: center">${item_index+1}</td>
</tr>
</#list>
</#if>
</#list>
</#list>
5、直接当参数${item.id}
<a class="btn btn-default btn-xs" id="button"
href="../index?id=${item.id}" >新建商品</a>
6、与三元运算符结合使用
<td style="text-align: center">${((item.is_tem!)==1)?string('是','否')}</td>
7、直接在js中使用
$("select[name='is_tmp']").find("option[value='${is_tmp!}']").attr("selected", "selected");
8、有值显示(非空判断)
<td style="text-align: center">${item.city!}</td>
9、?? 判断左侧的变量,相当于java中的null的判断,或者这个变量是否未定义。
<#if data.page_no ??>
</#if>
10、macro(宏指令)
语法:
<#macro 变量名 参数>
<#nested/>
</#macro>
<#--案例-->
<#macro getIndexPro c>
<a href="${g.globalUrl}/html/column/${g.getNewone(c.id).source}">
<div class="procontent main-img" style="background-image: url(${g.getNewone(c.id).cover})">
<p class="eng">${g.getNewone(c.id).abstracts}</p>
</div>
</a>
</#macro>
调用:
<@macro_name param />
<#list articleChildren as c>
<@getIndexPro c />
</#list>
11、function(函数指令)
语法:
<#function 变量名 参数>
<#return>
</#function>
<#--案例-->
<#--封装截取字符串长度方法-->
<#function subtitle title>
<#if title?length gt 10>
<#return title?substring(0,10)+"...">
<#else >
<#return title>
</#if>
</#function>
调用:
${function_name(param)}
${subtitle("sadsadsagjdsaf")}
End
Over ~~~