`
tang9140
  • 浏览: 35515 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

FreeMarker常见用法教程

 
阅读更多

一、认识FreeMarker

FreeMarker是一款模板引擎:一种基于模板的、用来生成输出文本的通用工具。类似模板引擎还有Velocity,Common Template等。

对于java web开发来说,使用FreeMarker模板,可以将java代码从页面中分离出来。开发人员只需关注业务逻辑代码,而由页面设计人员去设计显示效果,两类人员各司其职,发挥其擅长的一面。

FreeMarker注释:类似HTML的注释,用<#--和-->来分隔的。任何介于这两个分隔符(包含分隔符本身)之间的内容会被FreeMarker忽略,不会执行或输出。

二、常用指令

if指令

if指令进行条件输出控制,类似程序语言中的if语句。

格式:

<#if condition>content</#if>
<#if condition>content<#else>other content</#if>

示例:

<#if username == "boss">Hi boss!</#if>
<#if username == "boss">Hi boss!<#else>Hi!</#if>

说明:上例意思是如果变量username值为"boss",输出Hi boss!,否则输出Hi!。

==是来判断在它两侧的值相等的操作符,比较的结果是布尔值,true 或者false。在==的左侧,是引用的变量,右侧是指定的字符串。

注意:右侧字面量可以是字符串或数字,如果是字符串,要用引号(单,双引号都行)括起来,并且==左右两边类型要一致,否则出报错。


list指令

list指令用来遍历集合中的内容。

格式:

<#list vars as var>
	repeat content
</#list>

示例:

<#list ["星期一", "星期二", "星期三"] as day>
${day}
</#list>

说明:上例输出三行,每行依次输出星期一、星期二、星期三。

集合中元素可以是简单的字符串,如上例,也可以是复杂对象

assign指令

assign指令用来定义一个变量并给其赋值,或者替换原有变量的值

格式:

<#assign name=value [name1=value1...]>
<#assign name>capture this</#assign>

示例:

<#assign username="master">

说明:

后一种格式为复杂用法。将assign对中的内容输出作为name变量的值

include指令

使用include指令,我们可以在当前的模板中插入其他文件的内容。

格式:

<#include "filepath">

示例:

<#include "/copyright_footer.html">

说明:

被包含进来的文件,既可以是静态页,也可以是动态页(即ftl模板)。include指令会先将该文件内容包含进当前模板,然后再跟数据模型结合输出。


处理未定义变量或值为null

当变量未定义时,或值为null时,默认设置下FreeMarker会报错。下面有两种处理方式


1.设置默认值

格式:

${varname!default_value}

示例:

${user!"visitor"}
${apple.price!0}

说明:对于多级访问的变量,比如animals.python.price,书写代码:${animals.python.price!0},当animals或者python不存在,那么模板处理过程将会以“未定义的变量”错误而停止。为了防止这种情况的发生,可以这样来书写代码${(animals.python.price)!0}。这种情况下当animals或python不存在时表达式的结果仍然是0。

2.加if判断

格式:
<#if varname??>content</#if>
<#if varname?exists>content</#if>

示例:

<#if user??>Hi,${user}</#if>
<#if user?exists>Hi,${user}</#if>

说明:

如果user变量存在,且值不为NULL时,才输出Hi,user变量值。同样对于多级访问的变量,??前面的变量名最好被()包含,原因参照!设置默认值。


3.修改全局配置

classic_compatible=true


当FreeMarker指定为"Classic Compatibile"(兼容经典)模式运作时,引擎将会按下列方式输出:

1.友好的处理未定义表达式(即不报错),所谓未定义表达式,就是指“expr”变量未定义,或值为null.

像<assign varname=expr>、${expr}、“otherexpr == expr”、“otherexpr != expr”、hash[expr]中expr未定义时当成空字符串对待

像<list expr as item>、<foreach item in expr>中expr未定义时,循环体不会执行(就像expr是一个空List一样)

像用在<if>指令中或作为布尔表达式时,空值将被当成是false来处理。非布尔数据模型或者逻辑操作数也可以放在<if>指令中,空模型(长度为零的字符串,空的数组或者hash集合)被当成是false来对待,其他情况下都被当成是true来处理。

2.布尔值被看作字符串时(比如用${...}输出,或者是和其他字符串连接时),true值将被转换成“true”字符串处理,false值将被转换成空字符串

3.传给<list>和<foreach>的标量模型被当成只包含一个该元素的list来处理。

4.<include>指令的路径参数将被作为绝对路径处理

三、常见操作汇总

直接指定值

字符串:"Foo" 或者 'Foo' 或者 "It's \"quoted\"" 或者"C:\raw\string"
数字:123.45
布尔值:true, false
序列:["foo", "bar", 123.45], 1..100
哈希表:{"name":"green mouse", "price":150}

检索变量

顶层变量:user
从哈希表中检索数据:user.name, user[“name”]
从序列中检索:products[5]
特殊变量:.main

字符串操作

插值(或连接):"Hello ${user}!"(或"Free" + "Marker")
获取一个字符:name[0]

序列操作

连接:users + ["guest"]
序列切分:products[10..19] 或 products[5..]

哈希表操作

连接:passwords + {"joe":"secret42"}

算数运算

(x * 1.5 + 10) / 2 - y % 100

比较运算

x == y, x != y, x < y, x > y, x >= y, x <= y, x &lt; y, x &gt; y 等等

逻辑操作

!registered && (firstVisit || fromEurope)

内建函数

name?upper_case

方法调用

repeat("What", 3)

处理不存在的值

指定默认值:name!"unknown" 或name! 多级访问变量(user.name)!"unknown" 或者 (user.name)!
检测不存在的值:name?? ,(user.name)??

四、数字格式化问题

当数字超过3位的时候,默认输出会自动带上逗号。例如2000,会显示为2,000。还有当小数位数超过3位时,默认只显示小数点后3位。例如1.33213,会显示为1.332;1.33253,会显示为1.333;

如何解决呢?

1> 加?c,即转成字符串,如:${userId?c}

2> 修改配置文件freemarker.properties加上number_format=#

五、格式化输出

${xx?c} //转成字符串显示
${xx?string.number}//按数字显示
${xx?string.currency}//按贷币格式显示
${xx?string.percent} //按百分比格式显示

六、去空格

${xx?trim}

七、格式化日期

${date?string("yyyy-MM-dd HH:mm:ss")}
${date?string("yyyyMMdd")}

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    FreeMarker动静分离生成html文件

    动态表达式的常见形式有`${...}`,`&lt;#...&gt;`等。 在Eclipse中,你需要先创建一个FreeMarker模板文件(例如:`template.ftl`)。在文件中,你可以写入HTML结构,并在需要动态内容的地方插入FreeMarker表达式。例如,...

    grails使用freemarker.rar

    标题中的“grails使用freemarker.rar”表明这是一个关于如何在Grails框架中应用FreeMarker模板引擎的资源包。FreeMarker是一个开源的、基于Java的模板引擎,它用于生成动态HTML或其他格式的文本,比如XML、PDF等。...

    freemarker学习资料汇总

    这份教程可能以实例驱动的方式,通过实际的Web项目场景来教授Freemarker的用法。它可能会涵盖如何在Spring MVC或其它框架中集成Freemarker,以及如何在模板中进行复杂逻辑处理。此外,还可能讲解Freemarker的模板...

    freemarker_lastest最新最全--文档+安装包+操作手册

    4. **freemarker常用使用文档.ppt**:这个可能是Freemarker的使用教程或者示例集,以PPT形式呈现,适合快速学习和查阅常见用法,例如变量赋值、控制结构、函数调用等。 5. **FreeMarker_2.3.23_Manual_zh_CN.zip**...

    java使用freemarker模板技术导出word

    Java 使用 FreeMarker 模板技术导出 Word 是一种常见的数据动态生成文档的方法,它结合了 Java 的编程能力和 FreeMarker 模板引擎的强大功能,能够帮助开发者高效地生成结构化的 Word 文档。FreeMarker 是一个开源的...

    Freemarker教程+中文版

    在Web开发中,FreeMarker常被用作MVC(模型-视图-控制器)架构中的视图部分,与Spring框架结合使用尤为常见。本教程旨在深入讲解FreeMarker的基本概念、语法和高级特性,帮助开发者更好地理解和运用这一强大的模板...

    Freemarker教程 中文版

    ### Freemarker教程中文版知识点详解 #### 一、FreeMarker简介 - **定位与功能**:FreeMarker是一款基于模板的文本生成工具,主要用于生成各类文本输出,如HTML、XML、RTF、Java源代码等。它由纯Java编写,因此可以...

    FreeMarker教程

    ### FreeMarker教程知识点详解 #### 一、FreeMarker概述 **FreeMarker** 是一款非常流行的模板引擎,主要用于根据模板和数据模型生成文本输出。它的主要应用场景包括但不限于动态生成HTML页面,使得前端设计师能够...

    MyEclipse freemarker插件

    6. **文档与教程**:部分插件可能还附带Freemarker的在线文档或教程链接,方便用户随时查阅相关资料,学习和提升Freemarker技能。 7. **版本控制集成**:与MyEclipse的版本控制系统(如Git、SVN)无缝集成,方便...

    freemarker环境搭建(一)

    在本教程中,我们将深入探讨如何搭建并使用Freemarker环境。 一、Freemarker简介 Freemarker是一个开源的Java库,它处理模板,生成基于这些模板的文本输出。这些模板可以用于生成任何类型的文本,但最常见的是HTML...

    基于itext7+freemarker模板导出pdf

    本教程将探讨如何使用iText7和FreeMarker库结合,来创建一个基于模板的PDF生成流程,确保中文支持和图片的正常显示。 首先,iText7是一款强大的Java库,专门用于生成和操作PDF文档。它提供了丰富的API,可以方便地...

    freemarker资料

    Freemarker是一个强大的Java模板引擎,它被广泛用于Web开发,特别是与Spring框架...如果你已经下载了"freemaker1"压缩包,那么其中可能包含了示例模板、文档、教程等内容,帮助你更深入地学习和理解Freemarker的用法。

    freemarker教程

    ### Freemarker教程详解 #### FreeMarker概述 FreeMarker是一个基于模板的文本生成工具,主要功能是根据提供的数据和模板来生成各类文本输出,比如HTML网页、XML文档等。该工具完全采用Java语言编写,适用于各种...

    FreeMarker入门手册

    - 示例代码:通过实际编写模板和Java代码,结合教程进行实践是掌握FreeMarker的关键。 7. **最佳实践** - 模板设计应简洁,避免过度复杂化。 - 使用模板继承和导入减少代码重复。 - 适当地使用FreeMarker的宏和...

    Freemarker-2.3.19中文手册和jar包

    5. **问题解决**: 解答在使用过程中可能遇到的问题和常见错误。 综上所述,Freemarker是一个功能丰富的模板引擎,适用于Java Web开发,通过与数据模型的结合,可以生成动态内容。提供的中文手册和jar包,使得中文...

    Freemarker中文教程

    ### Freemarker中文教程知识点概述 #### 一、FreeMarker简介 **FreeMarker**是一款功能强大的模板引擎,主要用于生成静态文件,如HTML页面等。它能够根据开发者提供的模板和数据模型生成所需的输出。FreeMarker的...

    Struts2整合Freemarker生成静态页面

    8. **静态页面生成**:整合Struts2和Freemarker的一个常见应用是生成静态页面,提高网站性能。这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和...

    Spring 使用Freemarker发送邮件的一个简单模板(代码不完整)

    标题“Spring使用Freemarker发送邮件的一个简单模板”指的是通过Spring的JavaMailSender接口和Freemarker模板来生成和发送邮件。首先,我们需要在项目中引入Spring和Freemarker的相关依赖,确保能够使用这两个库的...

    初试FreeMarker模板的一些问题

    这篇博客可能是作者在初学FreeMarker时记录的一些常见问题及解决方案,对于初学者来说具有很高的参考价值。在实际操作中,理解FreeMarker的工作原理,掌握其基本语法和高级特性,是顺利使用这个模板引擎的关键。

    Spring Boot集成OpenPDF和Freemarker实现PDF导出功能教程配套源码

    该源码对应个人博客【Spring Boot集成OpenPDF和Freemarker实现PDF导出功能并附源码】配套教程,地址:https://blog.csdn.net/lhmyy521125/article/details/140743558 小伙伴可以自行下载学习!不需要积分!不需要...

Global site tag (gtag.js) - Google Analytics