什么是 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 ~~~

文章作者: 已删除用户
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yida
Back-end Freemarker
喜欢就支持一下吧