`

【JAVA】FreeMarker学习1(Ftl)

阅读更多
<# ... > 中存放所有freemaker的内容,之外的内容全部原样输出。
<@ ... /> 是函数调用
两个定界符内的内容中,第一个符号表示指令或者函数名,其后的跟随参数。freemaker提供的控制包括如下:
<#if condition><#elseif condition><#else></#if> 条件判断
<#list hash_or_seq as var></#list> 遍历hash表或者collection(freemaker称作sequence)的成员
<#macro name param1 param2 ... ><#nested param></#macro> 宏,无返回参数
<#function name param1 param2><#return val></#function>函数,有返回参数
var?member_function(...) 用函数对var进行转换,freemaker称为build-ins。实际内部实现类似member_function(var, ...)
stringA[M .. N] 取子字符串,类似substring(stringA, M, N)
{key:value, key2:value2 ...} 直接定义一个hash表
[item0, item1, item2 ...] 直接定义一个序列
hash0[key0] 存取hash表中key对应的元素
seq0[5] 存取序列指定下标的元素
<@function1 param0 param1 ... /> 调用函数function1
<@macro0 param0 param1 ; nest_param0 nest_param1 ...> nest_body <
/@macro > 调用宏,并处理宏的嵌套
<#assign var = value > 定义变量并初始化
<#local var = value> 在 macro 或者 function 中定义局部变量并初始化
<#global var = value > 定义全局变量并初始化
${var} 输出并替换为表达式的值
<#visit xmlnode> 调用macro匹配xmlnode本身及其子节点
<#recurse xmlnode> 调用macro匹配xmlnode的子节点

<#if condition > </#if>
<#list SequenceVar as variable > repeatThis </#list>
<#include "/copyright_footer.html">

一个ftl标记不能放在另外一个ftl标记里面,但是注释标记能够放在ftl标记里面。

系统预定义指令采用<#...></#>
用户自定义指令采用<@...></@>

hash片段可以采用:
products[10..19] or products[5..] 的格式。

序列也可以做加法计算:passwords + {"joe":"secret42"}

缺省值: name!"unknown" 或者 (user.name)!"unknown" 或者 name! 或者 (user.name)!
null值检查: name?? or (user.name)??

转义列表:
Escape sequence Meaning
\" Quotation mark (u0022)
\' Apostrophe (a.k.a. apostrophe-quote) (u0027)
\\ Back slash (u005C)
\n Line feed (u000A)
\r Carriage return (u000D)
\t Horizontal tabulation (a.k.a. tab) (u0009)
\b Backspace (u0008)
\f Form feed (u000C)
\l Less-than sign: <
\g Greater-than sign: >
\a Ampersand: &
\{ Curly bracket: {
\xCode Character given with its hexadecimal [url=file:///C:/Documents%20and%20Settings/Administrator/桌面/freemarker- 2.3.9/docs/docs/gloss.html#gloss.unicode]Unicode[/url] code ([url=file:///C:/Documents%20and%20Settings/Administrator/桌面/freemarker-2.3.9/docs/docs/gloss.html#gloss.UCS]UCS[/url] code)

如果想打印${,则需要将{转义,可以写成"$\{user}",或者可以用生字符(r指令):$(r "${xx}"}

序列构成:<#list ["winter", "spring", "summer", "autumn"] as x>${x}</#list>

不同的对象可以存放在一个序列里面,比如:[2 + 2, [1, 2, 3, 4], "whatnot"]. 第一个是数字,第二个是序列,第三个是字符串。

可用采用start..end的方式来定义一个数字序列,start可以小于end,同时,end也可以省略。

hash取值支持一下四种模式:book.author.name, book["author"].name, book.author.["name"], book["author"]["name"].
特殊变量是指freemaker引擎本身定义的变量。访问时,以.variable_name的语法访问。

变量表达式支持嵌套模式,比如:${"Hello ${user}!"}。

变量表达式在指令中的使用情况:
变量表达式可以在指令中,用“”的方式存在,不如:<#include "/footer/${company}.html">.
但是不允许下面的方式存在: <#if ${isBig}>Wow!</#if>, 正确写法是:<#if isBig>Wow!</#if>.
而且 <#if "${isBig}">Wow!</#if>写法也不正确,因为"${isBig}"返回的是字符串,不是boolean类型。

字符串中取字符或字符串采用以下语法:${user[0]},${user[0..2]} ${user[4..]},${user?string(4)}

序列操作:
加法:<#list ["Joe", "Fred"] + ["Julia", "Kate"] as user> 但要注意串联之后的读取速度变慢。
子序列:seq[1..4]

序列和hash的串联都只能用于两个相加,不能有多个相加的模式,hash相加,如果两个相加的hash存在相同的key,则后面会覆盖前面的。

在使用>=或者>时,需要注意一些问题,因为freemaker会将>解释成标记的关闭符,为了解决这个问题,需要在表达式加上括号,比如: <#if (x > y)>. 或者使用 > and <符号来代替。

无值变量(包括无该变量,null,返回void,无属性等):unsafe_expr!default_expr or unsafe_expr! or (unsafe_expr)!default_expr or (unsafe_expr)!
缺省值可以是任何类型,不一定是数字,比如:hits!0 或者 colors!["red", "green", "blue"].

如果缺省值忽略,那么将会默认为空串、空序列或者空hash,因为freemarker支持多类型的值。不过要让默认值为0或false,则不能省略缺省值。

非顶层变量的无值处理:
product.color!"red":只处理product不为空,color为空的缺省值处理,如果product为空,则freemaker会抛 出异常。(product.color)!"red":则会处理product为空,color为空,或者没有color属性的无值情况。

无值变量的判断操作:unsafe_expr?? or (unsafe_expr)??

判断变量是否是无值。
分享到:
评论

相关推荐

    Freemarker模板生成pdf+java

    Freemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+java

    java freemarker导出word -包含多张图片导出

    1. **FreeMarker基础** FreeMarker是Apache软件基金会的一个开源项目,它是一种基于模板的语言,用于生成任何类型的文本输出。在Java应用中,FreeMarker作为后端模板引擎,与Java对象模型(如Map或POJOs)相结合,...

    Java freemarker 模板生成word动态表格

    1. **FreeMarker模板引擎**:FreeMarker是一个独立于任何Web框架的Java库,它的主要任务是将模板(.ftl文件)和数据模型结合起来,生成文本输出。模板语言是声明式的,这意味着你只需要描述“应该怎样显示”,而不是...

    Java freemarker demo 【struts + freemarker】 自己修改的一个小例子

    总的来说,这个“Java FreeMarker demo 【Struts + FreeMarker】”是一个学习和实践MVC架构的好起点,通过它你可以深入理解Struts和FreeMarker如何协同工作,生成动态的Web页面。在掌握这两个工具后,你将能够更高效...

    Java中使用 FreeMarker 生成pdf盖章合同文件

    本篇文章将深入探讨如何在Java中使用FreeMarker生成带有盖章的PDF合同文件。 首先,让我们了解FreeMarker的基本概念。FreeMarker是一个基于模板的语言,它与Java代码分离,允许开发者用简单的模板语法来表示数据。...

    freemarkerdemo 生成word 插入图片

    1. **Freemarker基础知识**:Freemarker是一个基于模板的语言,它允许开发者通过定义模板文件,然后结合Java对象数据,生成动态内容。模板文件中包含了一系列控制结构(如条件语句、循环)和变量引用,这些变量可以...

    java freemarker学习文档

    Freemarker是一个强大的Java模板引擎,常用于Java Web开发中,用于动态生成HTML或其他类型文本。它是基于模板的,允许开发者将逻辑与呈现分离,使前端界面更加灵活和可维护。下面将详细介绍Freemarker的一些核心概念...

    Java FreeMarker+Maven实现代码自动生成

    1. **配置FreeMarker**:首先,你需要在你的Maven项目中添加FreeMarker的依赖。在`pom.xml`文件中,添加如下依赖: ```xml &lt;groupId&gt;org.freemarker &lt;artifactId&gt;freemarker &lt;version&gt;2.3.30 ``` 2. **创建...

    java freemarker 导出 word

    然后,创建一个FreeMarker模板文件(通常为`.ftl`扩展名)。这个模板文件定义了Word文档的结构和格式,其中可以包含变量和控制结构。例如,一个简单的模板可能如下所示: ```html &lt;!DOCTYPE html&gt; ; charset=utf...

    Java根据ftl模板生成多表格复杂性word文档

    Java使用FTL(FreeMarker Template Language)模板生成多表格复杂性Word文档是一项常见的技术需求,尤其是在需要自动生成报告或批量处理文档的场景中。FreeMarker是一个强大的、基于模板的Java库,它允许开发者将...

    Freemarker代码生成器实体映射xml的ftl模板文件

    在实际使用中,开发者会提供一个包含数据库元数据(如表名、字段名、类型等)的Java对象或数据结构给Freemarker模板,然后Freemarker会根据`XML.ftl`中的规则,生成一个完整的XML映射文件。这个生成的XML文件可以...

    java通过freemarker模板导出word含图片

    FreeMarker是一个强大的、轻量级的模板语言,常用于Java应用中的视图层渲染。 首先,理解FreeMarker的基本概念。FreeMarker是一个基于模板的Java库,它允许开发者将静态模板语言与动态数据结合,生成HTML、XML或...

    java 使用 freemarker 导出word 包含 图片和动态的数据表,动态行和动态列

    首先,我们需要创建一个FreeMarker模板(.ftl文件),在模板中定义Word文档的基本结构,包括标题、段落、表格以及图片的占位符。例如: ```html &lt;!DOCTYPE html&gt; ; charset=UTF-8"&gt; ${title} ...

    freemarker生成xml示例

    1. **数据模型(Model)**:这是你要生成XML所依赖的数据,可以是Java对象、Map或者其他集合类型。例如,你可以创建一个包含多个元素的列表,每个元素都有属性如`name`、`age`等。 ```java List&lt;Person&gt; persons = ...

    java Freemarker生成word

    Java Freemarker 生成 Word 文档 Java Freemarker 是一个基于模板技术的文档生成工具,能够快速生成 Word 文档。下面是使用 Java Freemarker 生成 Word 文档的详细步骤和知识点。 Step 1: 准备 Word 模板 在生成 ...

    Java 用Freemarker导出word文档总结

    1. **工具代码**:在Java项目中,我们需要引入FreeMarker库(freemarker.jar)并创建一个FreeMarker配置对象,用来加载模板文件和设置全局变量。以下是一个简单的示例: ```java import freemarker.template....

    JAVA项目代码绘制PDF和通过freemarker动态生成PDF

    1. itextpdf(CreatePdf) 不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类,子类使用@Component命名,使用反射的方式获取...

    freemarker生成word,pdf转word,pdf插入图片

    freemarker根据模板ftl生成word,pdf格式转word,pdf指定位置插入图片

    freemarker+html生成pdf.zip

    2. **配置Freemarker**:在Java项目中,你需要引入`Freemarker`库,并配置相应的设置,如模板路径、数据模型等。创建一个`Template`对象,加载HTML模板文件。 3. **构建数据模型**:根据业务需求,创建一个数据模型...

    java使用freemarker模板技术导出word

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

Global site tag (gtag.js) - Google Analytics