<# ... > 中存放所有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+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+java
1. **FreeMarker基础** FreeMarker是Apache软件基金会的一个开源项目,它是一种基于模板的语言,用于生成任何类型的文本输出。在Java应用中,FreeMarker作为后端模板引擎,与Java对象模型(如Map或POJOs)相结合,...
1. **FreeMarker模板引擎**:FreeMarker是一个独立于任何Web框架的Java库,它的主要任务是将模板(.ftl文件)和数据模型结合起来,生成文本输出。模板语言是声明式的,这意味着你只需要描述“应该怎样显示”,而不是...
总的来说,这个“Java FreeMarker demo 【Struts + FreeMarker】”是一个学习和实践MVC架构的好起点,通过它你可以深入理解Struts和FreeMarker如何协同工作,生成动态的Web页面。在掌握这两个工具后,你将能够更高效...
本篇文章将深入探讨如何在Java中使用FreeMarker生成带有盖章的PDF合同文件。 首先,让我们了解FreeMarker的基本概念。FreeMarker是一个基于模板的语言,它与Java代码分离,允许开发者用简单的模板语法来表示数据。...
1. **Freemarker基础知识**:Freemarker是一个基于模板的语言,它允许开发者通过定义模板文件,然后结合Java对象数据,生成动态内容。模板文件中包含了一系列控制结构(如条件语句、循环)和变量引用,这些变量可以...
Freemarker是一个强大的Java模板引擎,常用于Java Web开发中,用于动态生成HTML或其他类型文本。它是基于模板的,允许开发者将逻辑与呈现分离,使前端界面更加灵活和可维护。下面将详细介绍Freemarker的一些核心概念...
1. **配置FreeMarker**:首先,你需要在你的Maven项目中添加FreeMarker的依赖。在`pom.xml`文件中,添加如下依赖: ```xml <groupId>org.freemarker <artifactId>freemarker <version>2.3.30 ``` 2. **创建...
然后,创建一个FreeMarker模板文件(通常为`.ftl`扩展名)。这个模板文件定义了Word文档的结构和格式,其中可以包含变量和控制结构。例如,一个简单的模板可能如下所示: ```html <!DOCTYPE html> ; charset=utf...
Java使用FTL(FreeMarker Template Language)模板生成多表格复杂性Word文档是一项常见的技术需求,尤其是在需要自动生成报告或批量处理文档的场景中。FreeMarker是一个强大的、基于模板的Java库,它允许开发者将...
在实际使用中,开发者会提供一个包含数据库元数据(如表名、字段名、类型等)的Java对象或数据结构给Freemarker模板,然后Freemarker会根据`XML.ftl`中的规则,生成一个完整的XML映射文件。这个生成的XML文件可以...
FreeMarker是一个强大的、轻量级的模板语言,常用于Java应用中的视图层渲染。 首先,理解FreeMarker的基本概念。FreeMarker是一个基于模板的Java库,它允许开发者将静态模板语言与动态数据结合,生成HTML、XML或...
首先,我们需要创建一个FreeMarker模板(.ftl文件),在模板中定义Word文档的基本结构,包括标题、段落、表格以及图片的占位符。例如: ```html <!DOCTYPE html> ; charset=UTF-8"> ${title} ...
1. **数据模型(Model)**:这是你要生成XML所依赖的数据,可以是Java对象、Map或者其他集合类型。例如,你可以创建一个包含多个元素的列表,每个元素都有属性如`name`、`age`等。 ```java List<Person> persons = ...
Java Freemarker 生成 Word 文档 Java Freemarker 是一个基于模板技术的文档生成工具,能够快速生成 Word 文档。下面是使用 Java Freemarker 生成 Word 文档的详细步骤和知识点。 Step 1: 准备 Word 模板 在生成 ...
1. **工具代码**:在Java项目中,我们需要引入FreeMarker库(freemarker.jar)并创建一个FreeMarker配置对象,用来加载模板文件和设置全局变量。以下是一个简单的示例: ```java import freemarker.template....
1. itextpdf(CreatePdf) 不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类,子类使用@Component命名,使用反射的方式获取...
freemarker根据模板ftl生成word,pdf格式转word,pdf指定位置插入图片
2. **配置Freemarker**:在Java项目中,你需要引入`Freemarker`库,并配置相应的设置,如模板路径、数据模型等。创建一个`Template`对象,加载HTML模板文件。 3. **构建数据模型**:根据业务需求,创建一个数据模型...
Java 使用 FreeMarker 模板技术导出 Word 是一种常见的数据动态生成文档的方法,它结合了 Java 的编程能力和 FreeMarker 模板引擎的强大功能,能够帮助开发者高效地生成结构化的 Word 文档。FreeMarker 是一个开源的...