1 、快速入门
( 1 )模板 + 数据模型 = 输出
l FreeMarker 基于设计者和程序员是具有不同专业技能的不同个体的观念
l 他们是分工劳动的:设计者专注于表示——创建 HTML 文件、图片、 Web 页面的其它可视化方面;程序员创建系统,生成设计页面要显示的数据
l 经常会遇到的问题是:在 Web 页面(或其它类型的文档)中显示的信息在设计页面时是无效的,是基于动态数据的
l 在这里,你可以在 HTML (或其它要输出的文本)中加入一些特定指令, FreeMarker 会在输出页面给最终用户时,用适当的数据替代这些代码
l 下面是一个例子:
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="${latestProduct.url}">${ latestProduct.name } </a>!
</body>
</html>
l 这个例子是在简单的 HTML 中加入了一些由 ${…} 包围的特定代码,这些特定代码是 FreeMarker 的指令,而包含 FreeMarker 的指令的文件就称为模板( Template )
l 至于 user 、 latestProduct.url 和 latestProduct.name 来自于数据模型( data model )
l 数据模型由程序员编程来创建,向模板提供变化的信息,这些信息来自于数据库、文件,甚至于在程序中直接生成
l 模板设计者不关心数据从那儿来,只知道使用已经建立的数据模型
l 下面是一个可能的数据模型:
(root)
|
+- user = "Big Joe"
|
+- latestProduct
|
+- url = "products/greenmouse.html"
|
+- name = "green mouse"
l 数据模型类似于计算机的文件系统.
2 、数据模型
( 1 )基础
l 在快速入门中介绍了在模板中使用的三种基本对象类型: scalars 、 hashes 和 sequences ,其实还可以有其它更多的能力:
Ø scalars :存储单值
Ø hashes :充当其它对象的容器,每个都关联一个唯一的查询名字
Ø sequences :充当其它对象的容器,按次序访问
Ø 方法:通过传递的参数进行计算,以新对象返回结果
Ø 用户自定义 FTL 标记:宏和变换器
l 通常每个变量只具有上述的一种能力,但一个变量可以具有多个上述能力,如下面的例子:
(root)
|
+- mouse = "Yerri"
|
+- age = 12
|
+- color = "brown">
l mouse既是scalars 又是 hashes ,将上面的数据模型合并到下面的模板:
${mouse}<#-- use mouse as scalar -->
${mouse.age}<#-- use mouse as hash -->
${mouse.color} <#-- use mouse as hash -->
l 输出结果是:
Yerri
12
brown
( 2 ) Scalar 变量
l Scalar 变量存储单值,可以是:
Ø 字符串:简单文本,在模板中使用引号(单引号或双引号)括起
Ø 数字:在模板中直接使用数字值
Ø 日期:存储日期 / 时间相关的数据,可以是日期、时间或日期 - 时间( Timestamp );通常情况,日期值由程序员加到数据模型中,设计者只需要显示它们
Ø 布尔值: true 或 false ,通常在 <#if …> 标记中使用
( 3 ) hashes 、 sequences 和集合
l 有些变量不包含任何可显示的内容,而是作为容器包含其它变量,者有两种类型:
Ø hashes :具有一个唯一的查询名字和它包含的每个变量相关联
Ø sequences :使用数字和它包含的每个变量相关联,索引值从 0 开始
l 集合变量通常类似 sequences ,除非无法访问它的大小和不能使用索引来获得它的子变量;集合可以看作只能由 <#list …> 指令使用的受限 sequences
( 4 )方法
l 方法变量通常是基于给出的参数计算值
l 下面的例子假设程序员已经将方法变量 avg 放到数据模型中,用来计算数字平均值:
The average of 3 and 5 is: ${avg(3, 5)}
The average of 6 and 10 and 20 is: ${avg(6, 10, 20)}
The average of the price of python and elephant is: ${avg(animals.python.price, animals.elephant.price)}
( 5 )宏和变换器
l 宏和变换器变量是用户自定义指令(自定义 FTL 标记),会在后面讲述这些高级特性
( 6 )节点
l 节点变量表示为树型结构中的一个节点,通常在 XML 处理中使用,会在后面的专门章节中讲
相关推荐
Freemarker是一个强大的模板引擎,常用于Web应用中的视图层开发,特别是在Java环境中,它作为MVC设计模式的一部分,负责生成动态HTML或其他格式的文本。本教程将深入讲解Freemarker的核心概念、语法和实际应用,帮助...
6. **性能优化**:FreeMarker在设计时考虑到了性能问题,通过缓存机制等手段来提高渲染速度,尤其是在处理大量数据时能够保持高效的响应能力。 #### 四、FreeMarker的基本语法与使用方法 - **变量引用**:在模板中...
FreeMarker 手册2.3.19版是由Nan Lei南磊翻译的中文版本,遵循Creative Commons Attribution 3.0 Unported 许可协议。此版本仅供中文阅读,不涉及原始英文手册的版权。手册旨在帮助开发者理解和使用FreeMarker模板...
#### 一、FreeMarker概述 **FreeMarker** 是一款用Java编写的强大且功能丰富的模板引擎,适用于多种应用场景,包括但不限于Web应用中的动态页面生成。其核心设计目标是易于使用,同时提供高度灵活性和强大的功能。 ...
手册中提到的FreeMarker手册由南磊翻译,版权遵循Creative Commons Attribution 3.0 Unported License,仅适用于中文版翻译,不涉及原英文版手册。 手册内容基于FreeMarker 2.3.19版本编写,因此提及的功能和指令都...
FreeMarker中文手册是由南磊翻译的官方指南,涵盖了FreeMarker的各个方面,从基础的模板开发,到高级的XML处理,再到内建函数和特殊变量的使用。手册的每个部分都有详细的章节,对FreeMarker的每个功能和特性都进行...
模板引擎是一种用于分离业务逻辑和展示格式的技术,这使得设计人员可以专注于设计,而程序员专注于编码,提高了开发效率并降低了维护成本。 FreeMarker的核心在于模板,它通过将数据模型与模板结合产生最终的文本...
Freemarker分离了逻辑编码(由Java等编程语言完成)与页面设计,使得Web应用程序的界面维护变得简单。 2. **版本**:此份资料针对的是Freemarker 2.3.19版本,由南磊翻译成中文,并根据Creative Commons ...
FreeMarker手册是由南磊翻译的,用于FreeMarker 2.3.16版本。手册的内容涉及模板开发、程序开发和XML处理等各个方面,是学习FreeMarker的有力工具。手册的版权采用Creative Commons Attribution 3.0 Unported ...
FreeMarker中文手册是南磊编译的一份详尽教程,旨在帮助开发者更高效地学习和掌握这一技术。 手册主要涵盖以下知识点: 1. **基础概念**:首先介绍FreeMarker的基本概念,包括模板、数据模型、指令和表达式等。...
在Web开发中,它能有效地将业务逻辑与界面设计分离,使得模板设计者可以专注于页面设计,而不必关心数据处理的细节。Freemarker支持自定义指令和表达式,允许开发者扩展模板语言的能力,以适应不同的业务需求。 该...
《Java Web程序设计任务教程》是一本专注于教授Java Web开发技术的教材,其源码第7章的内容可能涉及了Web应用程序的关键概念和技术。在这一章节中,学生通常会接触到诸如Servlet、JSP(JavaServer Pages)、MVC...
PHP是目前最流行的Web开发语言之一,本科论文基于PHP开发的店家服务与管理交互平台,以满足店家服务和管理的需求。下面是基于PHP的店家服务与管理交互平台的详细知识点。 一、相关技术 PHP是 Hypertext ...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它极大地简化了在Java EE平台上构建动态web应用的过程。在Java社区中,Struts2因其强大的功能、高度可扩展性和丰富的插件库而备受...
- **Interceptor(拦截器)**:拦截器是Struts2的核心特性之一,它们在Action执行前后进行预处理和后处理,可以实现如日志、权限控制、事务管理等功能。 - **Result(结果)**:定义了Action执行后的结果如何呈现,...
- kotlinx.html:这是一个构建HTML的DSL(领域特定语言),它允许开发者以声明式的方式编写HTML代码,可以作为传统模板系统(如JSP和FreeMarker)的替代品。 在与数据库交互方面,Kotlin提供了多种选项,包括直接...