没有合适的资源?快使用搜索试试~ 我知道了~
freemarker中文手册.doc
需积分: 3 2 下载量 152 浏览量
2010-08-31
09:37:53
上传
评论
收藏 203KB DOC 举报
温馨提示
试读
32页
freemarker中文手册.doc freemarker中文手册.doc freemarker中文手册.doc
资源详情
资源评论
资源推荐
FreeMarker 概述
FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java
编写
FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序
虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由
FreeMarker 生成页面,通过模板显示准备的数据(如下图)
FreeMarker 不是一个 Web 应用框架,而适合作为 Web 应用框架一个组件
FreeMarker 与容器无关,因为它并不知道 HTTP 或 Servlet;FreeMarker 同样可以应
用于非 Web 应用程序环境
FreeMarker 更适合作为 Model2 框架(如 Struts)的视图组件,你也可以在模板中使
用 JSP 标记库
FreeMarker 是免费的
1、通用目标
能够生成各种文本:HTML、XML、RTF、Java 源代码等等
易于嵌入到你的产品中:轻量级;不需要 Servlet 环境
插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等
你可以按你所需生成文本:保存到本地文件;作为 Email 发送;从 Web 应用程序发送
它返回给 Web 浏览器
2、强大的模板语言
所有常用的指令:include、if/elseif/else、循环结构
在模板中创建和改变变量
几乎在任何地方都可以使用复杂表达式来指定值
命名的宏,可以具有位置参数和嵌套内容
名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心
名字冲突
输出转换块:在嵌套模板片段生成输出时,转换 HTML 转义、压缩、语法高亮等等;
你可以定义自己的转换
3、通用数据模型
FreeMarker 不是直接反射到 Java 对象,Java 对象通过插件式对象封装,以变量方式在
模板中显示
你可以使用抽象(接口)方式表示对象(JavaBean、XML 文档、SQL 查询结果集等
等),告诉模板开发者使用方法,使其不受技术细节的打扰
4、为 Web 准备
在模板语言中内建处理典型 Web 相关任务(如 HTML 转义)的结构
能够集成到 Model2 Web 应用框架中作为 JSP 的替代
支持 JSP 标记库
为 MVC 模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员
5、智能的国际化和本地化
字符集智能化(内部使用 UNICODE)
数字格式本地化敏感
日期和时间格式本地化敏感
非 US 字符集可以用作标识(如变量名)
多种不同语言的相同模板
6、强大的 XML 处理能力
<#recurse> 和<#visit>指令(2.3 版本)用于递归遍历 XML 树
在模板中清楚和直觉的访问 XML 对象模型
FreeMarker 设计指南(1)
1、快速入门
(1)模板 + 数据模型 = 输出
FreeMarker 基于设计者和程序员是具有不同专业技能的不同个体的观念
他们是分工劳动的:设计者专注于表示——创建 HTML 文件、图片、Web 页面的
其它可视化方面;程序员创建系统,生成设计页面要显示的数据
经常会遇到的问题是:在 Web 页面(或其它类型的文档)中显示的信息在设计页
面时是无效的,是基于动态数据的
在 这 里 , 你 可 以 在 HTML ( 或 其 它 要 输 出 的 文 本 ) 中 加 入 一 些 特 定 指
令,FreeMarker 会在输出页面给最终用户时,用适当的数据替代这些代码
下面是一个例子:
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>
这个例子是在简单的 HTML 中加入了一些由${…}包围的特定代码,这些特定代码
是 FreeMarker 的指令,而包含 FreeMarker 的指令的文件就称为模板(Template)
至于 user、latestProduct.url 和 latestProduct.name 来自于数据模型(data model)
数据模型由程序员编程来创建,向模板提供变化的信息,这些信息来自于数据
库、文件,甚至于在程序中直接生成
模板设计者不关心数据从那儿来,只知道使用已经建立的数据模型
下面是一个可能的数据模型:
(root)
|
+- user = "Big Joe"
|
+- latestProduct
|
+- url = "products/greenmouse.html"
|
+- name = "green mouse"
数据模型类似于计算机的文件系统,latestProduct 可以看作是目录,而 user、url 和
name 看作是文件,url 和 name 文件位于 latestProduct 目录中(这只是一个比喻,实
际并不存在)
当 FreeMarker 将上面的数据模型合并到模板中,就创建了下面的输出:
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome Big Joe!</h1>
<p>Our latest product:
<a href="products/greenmouse.html">green mouse</a>!
</body>
</html>
(2)数据模型
典型的数据模型是树型结构,可以任意复杂和深层次,如下面的例子:
(root)
|
+- animals
| |
| +- mouse
| | |
| | +- size = "small"
| | |
| | +- price = 50
| |
| +- elephant
| | |
| | +- size = "large"
| | |
| | +- price = 5000
| |
| +- python
| |
| +- size = "medium"
| |
| +- price = 4999
|
+- test = "It is a test"
|
+- whatnot
|
+- because = "don't know"
类似于目录的变量称为 hashes,包含保存下级变量的唯一的查询名字
类似于文件的变量称为 scalars,保存单值
scalars 保存的值有两种类型:字符串(用引号括起,可以是单引号或双引号)和
数字(不要用引号将数字括起,这会作为字符串处理)
对 scalars 的访问从 root 开始,各部分用“.”分隔,如 animals.mouse.price
另外一种变量是 sequences,和 hashes 类似,只是不使用变量名字,而使用数字索
引,如下面的例子:
(root)
|
+- animals
| |
| +- (1st)
| | |
| | +- name = "mouse"
| | |
| | +- size = "small"
| | |
| | +- price = 50
| |
| +- (2nd)
| | |
| | +- name = "elephant"
| | |
| | +- size = "large"
| | |
| | +- price = 5000
| |
剩余31页未读,继续阅读
kevinwu629
- 粉丝: 10
- 资源: 46
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0