项目中Freemarker有一定的使用量,因此这里将Freemarker的基础知识做下总结:
什么是Freemarker了,FreeMarker是一款模板引擎:一种基于模板的、用来生成输出文本(任何来自于HTML格式的文用本来自动生成源代码)的通用工具。FreeMarker仅仅使用模板生成文本页面来呈现已经准备好的数据。
在FreeMarker学习过程中,发现其语法结构与Python有很大的相似之处,例如序列。
1. 示例
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="${a.url}">${a.name}</a>!
</body>
</html>
对于上述代码,能看懂HTML代码以及Struts2的OGNL或者java的EL表达式时,那么这么几行代码实在小case。
2. 模板
Freemarker的模板组成部分:文本,上面$那样的插值(interpolations),FTL标签外加注释。<#--和-->
2.1 if指令
<#if a.count< 1>
数字为0;
<#else>
数字为1;
</#if>
2.2 list指令
<#list sequence as loopVariable>repeatThis</#list>
2.3 include指令
使用include指令,我们可以插入其他文件的内容到当前的模板中。
<#include "/a.html">
2.4 处理不存在变量
1. 不存在赋初值
<h1>Welcome ${user!"a"}!</h1>
2. 不存在忽略代码段
<#if user??><h1>Welcome ${user}!</h1></#if>
??返回的值是true或false
3. 数值
序列:["foo", "bar", 123.45], 1..100
哈希表:{"name":"green mouse", "price":150}
从哈希表中检索数据:user.name, user[“name”]
序列切分:products[10..19] 和Python相似的是因为可以正反序遍历
该了解的知识:
转义序列 含义
\ 引号(u0022)
\’ 单引号(又称为撇号)(u0027)
\\ 反斜杠(u005C)
\n 换行符(u000A)
\r 回车(u000D)
\t 水平制表符(又称为标签)(u0009) --tab
\b 退格(u0008) --backspace
\f 换页(u000C)
\l 小于号:< --less
\g 大于号:>
\a 和号:& --and
3.1 序列
这个例子可以结合list指令看
<#list ["winter", "spring", "summer", "autumn"] as x>
${x}
</#list>
3.2 哈希表操作
下面的例子键值一样,那么优先是右边的。
<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
- Joe is ${ages.Joe} --这个打印的将是30
- Fred is ${ages.Fred}
- Julia is ${ages.Julia}
3.3 = 和!=
java中判断俩对象是否相等,用的是==,Freemarker用=即可。
使用>或者>=的情况,难道不会出问题,这个解析的时候不会将其当做结束符。所以对于这种情况,可以用gt代替>, gte代替>=,小于这种情况,也有可能出现问题。例如用逻辑与操作的时候,此时可能解析误以为为开始符。所以可以用lt代替 <,lte代替<=。
3.4 逻辑操作
逻辑或:|| 逻辑与:&& 逻辑非:!
3.5 内建函数(有用的东东)
格式为:得到字符串的大写形式:user?upper_case,相当于?意思表示.的意思即可理解。
常见内建函数:
html: 字符串中所有的特殊HTML字符都需要用实体引用来代替(比如<代替<)
cap_first:字符串的第一个字母变为大写形式
lower_case:字符串的小写形式
upper_case:字符串的大写形式
trim:去掉字符串首尾的空格
size:序列中元素的个数
int:数字的整数部分(比如-1.9?int就是-1)
3.6 方法调用
目前有方法repartStr,用于将字符串复制制定次数。
${repeatStr("What", 3)}
4. 自定义
4.1 自定义指令
自定义指令可以使用macro指令来定义,这是模板设计者所关心的内容。Java程序员若不想在模板中实现指令,而在Java 语言中实现指令,可以使用freemarker.template.TemplateDirectiveModel类来扩展。
4.1.1 宏
宏是有一个变量名的模板片段。你可以在模板中使用宏作为自定义指令,这样就能进行重复性的工作。
<#macro greet>
<font size="+2">Hello Joe!</font>
</#macro>
调用方法为<@greet></@greet>
4.2 自定义指令参数
<#macro greet person color>
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>
那么如何调用了。
<@greet person="Fred" color="black"/>
记得两个参数都得配置,否则解释不过去。当然可以在宏定义时,设置初始值。例如
<#macro greet person color="black">
根据FTL表达式规则,someParam=foo和someParam="${foo}"是不同的。第一种情况,是把变量foo的值作为参数的值来使用。第二种情况则是使用插值形式的字符串,那么参数值就是字符串了,赋予给someParam也就是字符串了。
4.3 嵌套
个人感觉,嵌套使用之后相当于一个while循环。指令为<#nested>,其执行位于开始和结束标记指令之间的模板代码段
<#macro do_thrice>
<#nested>
<#nested>
<#nested>
</#macro>
<@do_thrice>
a.
</@do_thrice>
运行结果为三个a.呗。
4.4 宏和循环变量
<#macro repeat count>
<#list 1..count as x>
<#nested x, x/2, x==count>
</#list>
</#macro>
<@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
那么输出的结果为:
1. 0.5
2. 1
3. 1.5
4. 2 Last!
应该很好理解吧,例如上面1到count=4的值赋给x让其循环,得到的x有几种处理:x ,x/2, x==count
然后调用,调用的变量用;进行隔开。注意变量和循环参数的顺序。
4.5 变量
1. 简单变量。用assign或macro指令来创建或替换这些变量
2. 局部变量。被设置在宏定义体内,使用local指令在宏定义体内来创建或替换局部变量。使用周期为宏的调用过程。
3. 循环变量。由指令(如list)自动创建的,而且它们只在指令的开始和结束标记内有效。
<#assign x = 1> 简单变量
<#list ["loop"] as x> 循环变量
4.6 命名空间
<#macro copyright date>
<p>Copyright (C) ${date} Julia Smith. All rights reserved.
<br>Email: ${mail}</p>
</#macro>
<#import "/lib/my_test.ftl" as my>
<#assign mail="fred@acme.com">
<@my.copyright date="1999-2002"/> //调用函数
${my.mail}
${mail}
看上面的代码知道属于两个不同的命名空间,自己ftl文件直接调用即可,而引入的ftl文件命名空间为my,所以用my可以调用其函数和变量。如果偶尔想要在一个被包含的命名空间上创建或替换一个变量。采用下面的方式
<#import "/lib/my_test.ftl" as my>
${my.mail}
<#assign mail="jsmith@other.com" in my>
${my.mail}
输出结果为:
jsmith@acme.com
jsmith@other.com
分享到:
相关推荐
FreeMarker 是一种强大的模板语言,主要用于生成动态内容,如HTML页面。...FreeMarker的核心概念是将静态的...对于初学者来说,理解FreeMarker的基础知识,如变量类型、模板结构和插值机制,是掌握这一技术的关键步骤。
### FreeMarker语法知识详解 #### 一、FreeMarker概述 FreeMarker是一种强大的模板引擎,用于生成文本输出。它被广泛应用于Web开发中,用于动态生成HTML页面以及其他类型的文本文件,如XML、JavaScript、电子邮件等...
根据提供的文件信息,我们可以深入探讨FreeMarker的基础语法及其在模板引擎中的应用。FreeMarker是一种用于生成文本输出的模板引擎,广泛...掌握了这些基础知识后,开发者就可以更高效地利用FreeMarker来构建动态网页。
本文将深入探讨Freemarker的基础知识,包括其主要特性和使用方法。 ### 1. 注释 Freemarker的注释使用`和`-->`这一对标签,而非标准的HTML注释`<!--`和`-->`。例如: ```html 这是一条Freemarker注释 --> ``` ##...
从标题和描述中提取的关键知识点是关于Freemarker的基本概念、其功能和用途,以及如何进行模板开发和程序开发。Freemarker是一种强大的模板引擎,广泛应用于Web开发中,尤其是MVC架构的应用中,负责生成HTML网页或...
1. **模板语言FTL**: Freemarker使用的模板语言叫做FreeMarker Template Language (FTL),它是一种声明式的、非过程式的语言。FTL文件包含了一系列的指令和表达式,用于生成最终输出。例如,`<#if>`、`<#foreach>`、...
1. **Freemarker基础知识**:Freemarker是一个基于模板的语言,它允许开发者通过定义模板文件,然后结合Java对象数据,生成动态内容。模板文件中包含了一系列控制结构(如条件语句、循环)和变量引用,这些变量可以...
在本资料中,我们将深入探讨Freemarker的基础知识,包括其基本语法、数据模型、模板设计以及如何在实际项目中使用它。 1. **Freemarker语法** Freemarker的核心是模板语言,由控制结构(如条件语句和循环)、变量...
1. **Freemarker基础概念** - **模板语言**:Freemarker使用一种简单的、声明式的模板语言,允许开发者编写模板,与后台数据模型结合,生成动态内容。 - **数据模型**:Freemarker模板与应用程序的数据模型进行...
首先,让我们理解Freemarker的基础知识。Freemarker是一个与语言无关的模板引擎,它将数据模型与视图(HTML或其他格式的文档)分离,实现了MVC模式。开发者定义模板文件,然后在后端填充数据模型,Freemarker会根据...
一、Freemarker基础 1. 模板语言:Freemarker是一种基于模板的语言,它允许开发者通过简单的语法(如 `${}` 和 `#if`)来动态地生成文本输出,如HTML、XML或者,如我们所关注的,Excel文件。 2. 数据模型:在使用...
这表明文档会从基础知识入手,逐步深入讲解FreeMarker的各种特性和用法。 - **阅读建议**:对于初学者而言,建议首先了解FreeMarker的基本概念和使用场景;然后,可以重点关注模板语言的语法结构,掌握变量引用、...
在这个例子中,我们看到的是如何在使用Struts2框架的基础上,集成Freemarker进行分页处理。以下是对这个主题的详细讲解: 首先,**Freemarker** 是一个模板引擎,它允许开发者通过定义模板来生成HTML或其他文本格式...
本压缩包集合了丰富的Freemarker学习资源,涵盖从基础到进阶的各种知识点,以下是这些文档中可能包含的详细内容: 1. **Freemarker中文手册.pdf**: 这份手册通常会详细介绍Freemarker的基本概念,如模板语言、...
### FreeMarker实例教程知识点详解 ...以上知识点覆盖了FreeMarker的主要方面,通过本教程的学习,读者不仅能够掌握FreeMarker的基本使用方法,还能够深入了解其高级特性,为日后解决复杂的Web开发问题打下坚实的基础。
通过掌握这些基础知识,开发者能够有效地使用FreeMarker来构建动态网站和应用程序。在学习FreeMarker模板语法时,需要注意标签的正确使用、插值的类型和应用场景,以及如何通过设置和函数来控制数据的格式化输出。
它在Web开发中,尤其是在Struts2框架中,被广泛用于视图层...通过以上内容的学习,开发者不仅可以理解FreeMarker的基础知识,还能掌握在Struts2项目中实际运用FreeMarker的方法,从而提高Web应用的开发效率和代码质量。
1. **模板语言基础**:Freemarker模板由静态文本和动态控制结构组成,如`<#if>`、`<#foreach>`等。动态部分是由${...}或#{...}包裹的表达式,用于插入数据模型中的值。`<#assign>`用于定义变量,`<#function>`则允许...
一、Freemarker基础 1. 模板语法:Freemarker的模板语言由简单的文本和特殊的指令组成。例如,`${expression}`用于插入变量值,`<#if condition>`和`<#else>`用于条件判断,`<#list items as item>`用于循环遍历。 ...